2014-01-26 39 views
0

通過允許在Web請求,我最初的params爲這樣的,不包括不相關的部分:構造新的PARAMS在Rails的

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預先處理的參數,可以這樣:

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

我發現爲什麼經過一番研究。參考:docs on permit,如果想要允許一個數組/對象,需要指定需要被允許的元素。另外,沒有辦法允許整個數組/對象。

所以上面我的情況,我應該把:

params.require(:tennis_questionaire).permit(:tennis_ball_num,base_table:[:姓名,:年齡])來代替。