2

在我的应用程序中,我决定将部分逻辑移动到名为 CategoryForm 的额外类中,该类专用于 ActiveRecordCategory类。不幸的是,当我将参数传递给Category, 时ActiveModel::ForbiddenAttributesError被提出。这是类别类:

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为了......知道如何正确启用它或还有什么问题?

4

2 回答 2

3

您遇到的错误来自Rails 4 中添加的Strong Parameters。请在控制器中尝试此代码,而不是通过 Strong Parameters 过滤参数:

def create
  @category = Category.new
  @category_form = CategoryForm.new(@category, category_params)
  # ...
end

private
  def category_params
    params.require(:category).permit!
  end
于 2013-10-28T23:44:10.660 回答
0

只是为了完成答案,您可以使用 in rails 4which protected_attributes gemlet you work with attr_accessibleas in rails3。这是一个很棒railscast的主题。`

于 2013-10-29T00:24:46.033 回答