gpt4 book ai didi

ruby-on-rails - assign_attributes 和 ActiveModel::ForbiddenAttributesError

转载 作者:数据小太阳 更新时间:2023-10-29 08:48:39 25 4
gpt4 key购买 nike

在我的应用程序中,我决定将部分逻辑移到名为 CategoryForm 的额外类中,该类专用于 ActiveRecord Category 类。不幸的是,当我将参数传递到 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 的用途...知道如何正确启用它或者还有什么问题吗?

最佳答案

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

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

private
def category_params
params.require(:category).permit!
end

关于ruby-on-rails - assign_attributes 和 ActiveModel::ForbiddenAttributesError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19647016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com