我有以下引數:
params={"data"=>
{"type"=>"book",
"id"=>14,
"attributes"=>
{"id"=>14,
"created_at"=>"2022-06-27 21:15:39",
"title"=>"sdfdsf",
"targeting"=> { "release_times"=>[["4:00", "5:00"], ["5:00", "6:00"]],
"days"=>["Monday", "Tuesday", "Wednesday"],
"gender"=>["male", "female"]
}
}
}
當我使用它時,我可以獲得每個值,但 release_times 始終為空:
當我使用這個時:
safe_params = params.require(:data).permit( attributes: [:id, :created_at, :title, { targeting: {} }])
如何提取發布時間值?我試著這樣做
safe_params = params.require(:data).permit( attributes: [:id, :created_at, :title, { targeting: [:days, :gender, release_times:[]]}])
但我得到了錯誤:
驗證失敗:定位性別應該是一個值串列,定位天數應該是一個值串列
如何從目標中提取所有值,包括 release_times?
uj5u.com熱心網友回復:
正如Ruby on Rails API所述,在使用時,ActionController::Parameters您希望通過將引數映射到空陣列來宣告引數應該是陣列(串列)。就像你對 release_times.
您應該允許targeting使用[days: [], gender: []]而不是的引數[:days, :gender]。這應該可以解決錯誤。
但即使是它們,release_times也是一個陣列陣列,我認為目前不支持(這是一個老問題)。
你可以繞過這個的一種方法是改變你的交流方式release_times。使用哈希陣列而不是嵌套陣列。
由此:
"release_times"=>[["4:00", "5:00"], ["5:00", "6:00"]]
對此(或類似的東西):
"release_times"=>[{"start" => "4:00", "end"=>"5:00"}, {"start" =>"5:00", "end" => "6:00"}]
這樣,你可以這樣做:
safe_params = params.require(:data).permit(attributes: [:id, :created_at, :title, { targeting: [days: [], gender: [], release_times: [:start, :end]] }])
具體如何實作取決于您,但我希望它有所幫助。
**此外,release_times 有一個錯字。
你可以自己做一些測驗。打開rails c并執行以下操作:
param = ActionController::Parameters.new("targeting"=> { "release_times"=>[["4:00", "5:00"], ["5:00", "6:00"]]})
param.require(:targeting).permit(release_times: []) # > Doesn't return times.
new_param = ActionController::Parameters.new("targeting"=> { "release_times"=>[{"start" => "4:00", "end"=>"5:00"}, {"start" =>"5:00", "end" => "6:00"}] })
new_param.require(:targeting).permit(release_times: [:start, :end]) # > Return times.
只是一個觀察,使用permit!會起作用。但正如強大的引數檔案所說:
使用時應格外小心,
permit!因為它將允許批量分配所有當前和未來的模型屬性。
所以你可以試著為slice自己和他們爭論permit!——但我不能告訴你這是要走的路。
在此處了解有關批量分配漏洞的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/497358.html
上一篇:LVGL庫入門教程 - 影片
