在网络请求中,我的初始参数是这样的,不包括不相关的部分:
params = {
"base_table"=>{"name"=>"syy", "age"=>"12"},
"tennis_questionaire"=>{"tennis_ball_num"=>"3718"},
"id"=>"1"
}
我想将'base_table'放在“tennis_questionaire”下,因为它属于tennis_questionaire,我想只使用一种更新方法更新这两个对象。即,我想要的最终结果是这样的:
params[:tennis_questionaire] =
{"tennis_ball_num"=>"3718", "base_table"=>{"name"=>"syy", "age"=>"12"}},
为了达到这个目的,我创建了一个action_filter来预处理params,如下所示:
before_action :update_param, only: [:create,:update]
def update_param
params[:tennis_questionaire][:base_table] = ActionController::Parameters.new(
params.require(:base_table).permit(:name, :age)
)
end
然而,当我试图在处理params的实际代码中允许它时(在我将它传递给update
方法之前的最后一步):
params.require(:tennis_questionaire).permit(:tennis_ball_num,:base_table)
我发现不允许使用:base_table。
为什么会这样?关于如何使它工作的任何建议〜?
非常感谢
答案 0 :(得分:0)
我经过一些研究后发现了原因。参考:docs on permit,如果想要允许数组/对象,则需要指定需要允许的元素。另外,没有办法允许整个数组/对象。
所以对于我上面的情况,我应该说:
params.require(:tennis_questionaire).permit(:tennis_ball_num,base_table:[:name,:age])代替。