rails活动模型将数据与数据库一起存储在文件中

时间:2011-09-19 23:52:57

标签: ruby-on-rails

我有一个表单,当它发布时,它的一些数据会使用rails模型保存到数据库中。与数据库一起,我需要将一些内容存储到文件中。我可以在模型中增强“保存”方法以将内容写入文件吗?这是一个很好的设计。如果不是什么是理想的设计。

接下来,我想在应用程序配置中设置存储此文件的位置。我应该为文件位置定义此变量的文件,以及如何在模型/控制器中访问它

由于 基兰

1 个答案:

答案 0 :(得分:0)

您当然可以使用现有的现成文件附件库,例如paperclipcarrierwave

否则,你可以:

# 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)。