2017-07-24 37 views
0

周圍的Googling列,發現了很多的潛力解決方案的地獄正確處理它,結束了;下面,工作Rails5/STRONG參數/ JSON與「動態」鍵

def item_params 
     load_params = params.require(:item).permit(
     :title, 
     :content 
    ) 
     load_params[:meta] = params[:item][:meta] if params[:item][:meta] 
     load_params.permit! 
    end 

使用這樣的有效載荷(在控制檯看):仍

{ 
    "item" => { 
    "title"=>"abc", 
    "meta"=>{ 
     "fontcolor"=>"xyz", 
    } 
    } 
} 

日誌顯示,該領域是不允許的:

Unpermitted parameter: :meta 

不會阻塞,即使發出警告,它也會傳遞這些參數並正確保存。

沒有在相關列上使用序列化或任何序列化器,因爲它在沒有它的情況下按預期工作(與大量討論json列和序列化的帖子交談,現在看起來不像現在這樣,因爲它似乎只有一次)

這種解決方案並不在我的身邊,同樣的警告工作,但確實元參數是阻止:

def item_params 
    meta_keys = params[:item][:meta].keys 
    params.require(:item).permit(:title, meta: meta_keys) 
end 

由於這是顯得有點亂,我覺得挺不舒服需要大約用什麼最後的決定以及如何使用它;所以thx很多如果有任何自信的建議

+0

你也可以分享'您發佈樣本data'? – skam

+0

@skam增加了一個相關的例子 – Ben

回答

1

整點強參數不允許任意參數。我建議您嘗試將您想允許的所有密鑰列入白名單,並且只允許這些密鑰。

但要回答你的問題,如果你想允許動態密鑰下面應該這樣做,而無需登錄Unpermitted parameter:

def item_params 
    meta_keys = params.require(:item).fetch(:meta, {}).keys 
    params.require(:item).permit(:title,:meta => meta_keys) 
end