在我的应用程序中,我决定将部分逻辑移动到名为CategoryForm的额外类中,该类专用于ActiveRecord Category
类。不幸的是,当我将params传递到Category
时,ActiveModel::ForbiddenAttributesError
被提升了。
这是Category类:
class Category < ActiveRecord::Base
has_many :subcategories
accepts_nested_attributes_for :subcategories
end
CategoryForm类:
class CategoryForm
attr_accessor :model
def initialize(model, params = {})
@model = model
@model.assign_attributes(params)
build_subcategories
end
def save
delete_empty_subcategories
@model.save
end
private
def build_subcategories
8.times { @model.subcategories.build}
end
def delete_empty_subcategories
@model.subcategories.each { |subcategory| subcategory.delete if subacategory.empty?}
end
end
和CategoryController片段:
def create
@category = Category.new
@category_form = CategoryForm.new(@category, params[:category])
错误指向@model.assign_attributes(params)
行,据我了解,我的Category
无法使用子类别的参数。但另一方面,这就是nested_attributes
的用途......任何想法如何正确启用它或者还有什么错误?
答案 0 :(得分:3)
您遇到的错误来自Strong Parameters,它已在Rails 4中添加。请在控制器中尝试此代码,以通过强参数过滤参数:
def create
@category = Category.new
@category_form = CategoryForm.new(@category, category_params)
# ...
end
private
def category_params
params.require(:category).permit!
end
答案 1 :(得分:0)
只是为了完成答案,您可以在rails 4
protected_attributes
gem
中使用,这样您就可以attr_accessible
使用rails3
。关于这个问题,这是一个很棒的railscast
。
`