在Rails 4 here is the question有關如何做到這一點英寸我想知道的是,雖然這是有效的,但爲什麼日誌仍然在抱怨?的Rails 5.1 - JSON參數是允許的,但仍作爲打印未經許可的日誌
在Rails 5.1.3中,我有一個JSON列(letterhead
)作爲我的一個模型屬性(並且裏面的那個json是一個包含各種屬性的散列,我不關心白名單)。我只是想允許/列入白名單本身。
注on Rails的5.1.4
有一個Rails的方式做到這一點在5.1.4,看到this commit。 在github上有一個相當長的討論here。在Rails 5.1.4它很簡單:
def account_params
params.require(:account).permit(:id, :name, :plan_id, letterhead: {})
end
的:letterhead
參數是允許的,沒有錯誤顯示在日誌中和模型撲救。但顯然它允許在該參數內部的任意輸入,所以小心使用。
如果你是想限制其哈希鍵被允許這樣的參數裏面,那麼你也可以加入白名單的,像這樣的例子:
def account_params
params.require(:account).permit(:id, :name, :plan_id, letterhead: [:address, :logo, :contact_info])
end
現在,這可以防止任何其他任意鍵內:letterhead
因爲我已明確只允許這些3 - :address, :logo, :contact_info
的Rails 5.1.3(或更早)
餘可使用的任允許此列中的以下(見其他可能的選項也被鏈接討論):
選項1
def account_params
params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
whitelisted[:letterhead] = params[:account].fetch(:letterhead, ActionController::Parameters.new).permit!
end
end
選項2
def account_params
params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
whitelisted[:letterhead] = params[:account][:letterhead].permit!
end
end
在這兩種情況下,模型都會保存,但在日誌中仍然會顯示「未經許可的參數:信頭」
爲什麼仍然說,當我已經明確允許的嗎?
此外,有沒有選項1和選項2之間的任何真實的差異?
編輯
的數據是這樣的:
{"id"=>"a61151b8-deed-4efa-8cad-da1b143196c9",
"plan_id"=>"1dc49acf-3111-4030-aea1-7db259b53a51",
"name"=>"Test Account 1",
"is_active"=>true,
"letterhead"=>{"left"=>"", "center"=>"", "right"=>""},
"created_by"=>nil,
"updated_by"=>nil,
"created_at"=>"2017-10-14T19:05:40.197Z",
"updated_at"=>"2017-10-20T15:14:08.194Z"}
如何讓傳入的數據看起來像? – 7urkm3n
@ 7urkm3n我添加了一個顯示數據的編輯 – rmcsharry
你看到了什麼樣的錯誤(抱怨)?你可以發表年度日誌和使用方法嗎? – 7urkm3n