假设我有两个模型:
class Article < ActiveRecord::Base
belongs_to :category
attr_accessible :content
validates :content, :category, :presence => true
end
和
class category < ActiveRecord::Base
attr_accessible :name
has_many :articles
end
我正在创建一个表单来添加新文章,并希望在此表单中让用户可以从列表中选择一个类别。
= form_for([:admin,@article] , :html => {:multipart => true}) do |f|
= f.label :category
= f.collection_select(:category, Category.all, :id,
:name,{:prompt => 'select category'}, {:style => 'height:50px;'})
= f.label :content
= f.text_area :content, class: 'tinymce', cols:60, rows: 15
%hr
= f.submit 'send'
当我提交表单时,我收到错误 Can't mass-assign protected attributes: category ,我理解。为了解决问题,我将 category_id 添加到文章的 attr_accessible 并将表单更改为:
= f.label :category_id
= f.collection_select(:category_id, Category.all, :id,
:name,{:prompt => 'select category'}, {:style => 'height:50px;'})
然后一切正常(我可以在数据库中创建具有关联 category_id 的 Article 对象),但我认为这不是正确的方法。下面是我在 ArticlesController 中的创建操作
def create
@article = Article.new(params[:article])
if @article.save
redirect_to([:admin,@article])
else
render 'new'
end
end
有人可以解释我如何改善这一点。