Возможный 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)
технически, все еще единый.