我正在尝试将超过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'
吗?
答案 0 :(得分:9)
较新版本的Rails(正确)偏执于质量分配。在Asset模型中添加attr_accessible :asset_file_name
以声明数据库可以接受请求的外部参数输入。
为了更安全,在你的config.active_record.whitelist_attributes = true
中取消注释application.rb
(然后测试所有内容),这样你就不得不思考“是的,没关系会发生任何不好的事情”让用户更新。