禁止的属性 使用 Postman 在 Rails 4 中分配嵌套属性时出错



一个评估项目具有许多项目级别,其中一个项目级别属于一个评估项目。在我的模型中,我有

has_many :item_levels
accepts_nested_attributes_for :item_levels 

更新项目时,您应该能够指定应与该项目关联的级别。更新操作应接收为级别指定的参数,并创建与要更新的 Item 关联的新 ItemLevel 对象,并删除我们以前关联但在更新时未指定的任何级别。但是,当我尝试创建新关卡时,出现ActiveModel::ForbiddenAttributes错误。

控制器:

 def update
            @item = AssessmentItem.find(params[:id])
            old_levels = @item.item_levels    #active record collection
            @item.update_attributes(update_params)
            convert_levels = old_levels.map {|l| l.attributes} #puts into array       
            (items - convert_levels).each{|l| ItemLevel.create(l)} ##causes error
            (convert_levels - level_params).each { |l| ItemLevel.find(l["id"]).destroy }
          end
        end
        private
        def level_params
          params.require(:assessment_item).permit(:item_levels => [:descriptor, :level])
        end
        def update_params
          params.require(:assessment_item).permit(:slug, :description, :name)
        end

这是我在邮递员中的 json 请求:

{
    "assessment_item": {
        "slug" : "newSlug",
        "description" : "NewDescriptiong",
        "name" : "different name",
        "item_level_attributes":[
            {            
                "descriptor":"this should be new",
                "level":"excellent"
            }
            ]}
}

如何使我的操作允许参数?如何有效地将它们传递到工厂?谢谢。

我认为您还应该允许像这样update_params item_level_attributes

def update_params
    params.require(:assessment_item).permit(:slug, :description, :name, :item_levels => [:descriptor, :level])
end

def update_params
    params.require(:assessment_item).permit(:slug, :description, :name, :item_level_attributes => [:descriptor, :level])
end

最新更新