Возможный oneliner для этого кода Ruby on Rails

У меня есть объект файла, который имеет тип Rails ActionDispatch::Http::UploadedFile.

Мне нужно переписать назначенное пользователем имя файла с общим именем при сохранении расширения файла. Вот как я реализовал код в настоящее время. Есть ли способ лучше и элегантнее написать это на Ruby.

extension = File.extname(file_name.original_filename)
file_name.original_filename = "hello#{extension}"

2 ответа

Изменить: я неправильно понял. (Я думал new_name включил расширение, которое должно было быть заменено "old_fname"расширение.) Как говорит @Bassel (спасибо, Бассель), это должно быть просто:

old_fname = "/a/b/c.hello" 
new_fname = "/d/e/f"

new_fname += File.extname(old_fname)
file.original_filename.sub!(/.*\./, "hello.")

это работает, потому что.* жадный и проглотит все до последнего. это находит. Это как раз то, что было перед расширением.

Или сделать точную замену, вы можете просто сделать:

file_name.original_filename = "hello" + File.extname(file_name.original_filename)

технически, все еще единый.

Другие вопросы по тегам