Конечно, вы можете использовать одну из существующих готовых библиотек вложений файлов, например, paperclip и carrierwave .
В противном случае вы можете:
# config/application.rb
# ...
config.my_app.cache_file_prefix = "/tmp/files"
# app/models/my_model.rb
class MyModel < ActiveRecord::Base
# Causes ActiveRecord to run this method
# before saving (creating or updating).
before_save :copy_to_file
private
def copy_to_file
# Write data to the file.
file_name = copy_to_file_name
File.open(file_name) do |f|
f.write("some data")
end
end
def copy_to_file_name
# Calculate and return the expected file name.
prefix = Rails.configuration.my_app.cache_file_prefix
"#{prefix}/#{id}"
end
end
Обратите внимание, что это решение не будет работать, если у вас есть более одного сервера, на котором запущено приложение Rails. Вам следует рассмотреть возможность использования поставщика хранилища объектов (такого как S3 или Rackspace) или реплицированной или распределенной файловой системы (такой как DRDB или GlusterFS).