缺少资产模型attr_accessor与Paperclip

时间:2012-03-19 16:00:04

标签: ruby-on-rails ruby-on-rails-3 paperclip

我正在尝试将超过1个文件资源上传到电影中。我一直收到错误Asset model missing required attr_accessor for 'asset_file_name',我不知道为什么,这是我的代码:

asset.rb模型

class Asset < ActiveRecord::Base
  belongs_to :movie

  has_attached_file :asset
end

movie.rb模型

class Movie < ActiveRecord::Base
  belongs_to :user

  has_many :assets
  accepts_nested_attributes_for :assets

  validates :title, presence: true

  default_scope order: 'movies.created_at DESC'
end

我还运行了rails g paperclip movie asset,它生成了以下迁移文件

class AddAttachmentAssetToMovie < ActiveRecord::Migration
  def self.up
    add_column :movies, :asset_file_name, :string
    add_column :movies, :asset_content_type, :string
    add_column :movies, :asset_file_size, :integer
    add_column :movies, :asset_updated_at, :datetime
  end

  def self.down
    remove_column :movies, :asset_file_name
    remove_column :movies, :asset_content_type
    remove_column :movies, :asset_file_size
    remove_column :movies, :asset_updated_at
  end
end

这是我生成资产模型时的“创建资产”迁移:

class CreateAssets < ActiveRecord::Migration
  def change
    create_table :assets do |t|
    t.string :asset_file_name
    t.integer :asset_file_size
    t.string :asset_content_type
    t.datetime :asset_updated_at
    t.text :asset_description
    t.integer :movie_id

    t.timestamps
  end
end

可以说明为什么我会收到错误Asset model missing required attr_accessor for 'asset_file_name'吗?

1 个答案:

答案 0 :(得分:9)

较新版本的Rails(正确)偏执于质量分配。在Asset模型中添加attr_accessible :asset_file_name以声明数据库可以接受请求的外部参数输入。

为了更安全,在你的config.active_record.whitelist_attributes = true中取消注释application.rb(然后测试所有内容),这样你就不得不思考“是的,没关系会发生任何不好的事情”让用户更新。