我有一個 Sidekiq 工人,我向其發送控制器引數。我的控制器引數看起來像這樣。
def my_params
params.require(:users).permit(employees: [:param1, param_requested_attributes: [:attribute]])
end
因此,當我將 JSON 發送到控制器并使用 byebug 進行檢查時,引數的格式正確。但是當我將它們發送給工人時:
MyWorker.perform_async(my_params)
我將每個“員工”迭代為:
my_params.each do |employee|
data = JSON.parse(raw_data.gsub('=>', ':')) # to correctly format my json data
end
我得到一個“意外的令牌錯誤”,因為“params_requested_attributes”看起來像:
"params_requested_attributes"=>[<ActionController::Parameters> {"attribute"=>"value"} permitted: true> ]
我的問題是,在嘗試 JSON.parse 我的引數時如何避免這個“ActionController::parameters”?只有當我嘗試使用這些nested_attributes 時才會發生這種情況。我只想要一個原始的 json,但由于某種原因,我得到了這個“動作控制器引數”。
uj5u.com熱心網友回復:
你的問題是my_params:
def my_params
params.require(:users).permit(...)
end
為您提供了實體ActionController::Parameters和params_requested_attributes那就是另一個實體中ActionController::Parameters。然后你將一個作業加入佇列:
MyWorker.perform_async(my_params)
它必須序列化my_params到資料庫中,并且序列化沒有ActionController::Parameters按照您希望的方式處理內部。
您可以自己將引數轉換為嵌套散列:
MyWorker.perform_async(my_params.to_h)
擺脫ActionController::Parameters并最終在您的作業中使用簡單的散列和陣列。
如果你真的想要你的作業手動解包的 JSON,那么你將不得不多按摩my_params一點。也許您想要my_params.to_h然后 JSON 編碼然后嵌套params_requested_attributes. 這聽起來像是尋找問題的解決方案,我認為傳遞my_params.to_h給作業是你想去的地方。
uj5u.com熱心網友回復:
JSON.parse將 json 字串轉換為 ruby?? 物件。因此,如果您只需要原始 json 字串,則應使用raw_data并跳過.gsub呼叫。但是,我無法從您的示例中看出raw_data與員工價值的關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/384601.html
上一篇:android類異步上傳參考
下一篇:Heroku在構建程序中失敗并顯示錯誤:NodeSass尚不支持您當前的環境:Linux64位且運行時不受支持(93)
