【问题标题】:Rails 4 Strong Parameters when multiple-level accepts_nested_attributes_for多级accept_nested_attributes_for时的Rails 4强参数
【发布时间】:2015-08-29 15:26:49
【问题描述】:

当我尝试保存具有多个级别的accepts_nested_attribetus_for 的模型时遇到问题。

我的用例是有一个用户页面,用户可以在其中创建多个问题,也可以为每个问题创建多个答案。

发生的情况是,由于提交页面上可能有多个问题,用户的参数哈希在提交时看起来像:

{"user"=>{"questions_attributes"=>{"0"=>{"desc"=>"question", "answers_attributes"=>{"0"=>{"ans"=>""}}}}}}

因此,我得到的错误是“Unpermitted parameter: 0”。如何正确设置强参数权限,以便正确保存所有模型?我可以循环浏览这些问题,并单独保存每个问题,这很有效,但我希望有一种更简洁的方法。

用户.rb

has_many :questions
accepts_nested_attributes_for :questions

问题.rb

belongs_to :user
has_many :answers
accepts_nested_attributes_for :answers

answer.rb

belongs_to :question

users_controller.rb

def update
    user = User.find_by_id params[:id]
    user.questions.create question_params(params[:user])
end

def question_params(params)
    params.require(:question_attributes).permit(:desc, {:answers_attributes => [:ans]}
end

【问题讨论】:

    标签: ruby-on-rails-4 nested-attributes strong-parameters


    【解决方案1】:

    试试这个

    def update
      user = User.find_by_id params[:id]
      user.update(user_params)
    end
    
    def user_params
      params.require(:user).permit(:desc, :questions_attributes => [:question, answers_attributes => [:ans]])
    end
    

    【讨论】:

    • 它不工作。总是说 :ans 属性为 Unpermitted
    • 有没有人找到让它工作的方法?我在 Rails 5 上遇到了同样的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多