构造新的参数以在Rails中传递许可

时间:2014-01-26 07:25:02

标签: ruby-on-rails actioncontroller

在网络请求中,我的初始参数是这样的,不包括不相关的部分:

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。

为什么会这样?关于如何使它工作的任何建议〜?

非常感谢

1 个答案:

答案 0 :(得分:0)

我经过一些研究后发现了原因。参考:docs on permit,如果想要允许数组/对象,则需要指定需要允许的元素。另外,没有办法允许整个数组/对象。

所以对于我上面的情况,我应该说:

params.require(:tennis_questionaire).permit(:tennis_ball_num,base_table:[:name,:age])代替。