我有一個模型Group
其中has_many
Users
。Rails:has_many關聯通過表單中的對象ID數組
我使用JS的前端到User
ID添加到陣列user_ids
。隱藏字段看起來這樣:
= f.hidden_field :user_ids, id: "ids_field"
選擇幾個用戶,將它們添加到一個JS數組和assiginging隱藏字段的值到t帽子陣,我提出用強PARAMS(與user_ids作爲數組後)從PARAMS創建一個新的對象:
@group = Group.new(group_params)
def group_params
params.require(:group).permit(:name, :user_id, :user_ids=>[])
end
日誌顯示有一個逗號分隔的列表中user_ids提交:
Processing by GroupsController#create as JS
Parameters: {"utf8"=>"✓", "group"=>{"name"=>"", "user_ids"=>["25,1"]}, "commit"=>"Save Squad"}
檢查控制檯中的Group
顯示只有數組中的第一個ID被分配給該組。
irb(main):128:0> Group.last.user_ids
..
[
[0] 25
]
我一直在抨擊我的頭靠在牆上就這個問題在過去兩天,根本無法使它發揮作用。我嘗試了以下變體: - 在前端使用JSON - 刪除後端的序列化 - 使用.split(「,」)分割數組參數 - 使用group_params(包括/不包括「=> []「在user_ids上並將明確的名稱添加到我的隱藏字段中。通常我會在這裏得到一個不允許的參數錯誤。 - 使用Group.users < <將陣列分配到組模型....
任何幫助或方向是非常感謝。我覺得我在某個時候已經掌握了所有的部分,而不是在同一時間。如果我完全關閉,並且有更好的方法來做到這一點,我已經準備好拋棄它並繼續前進。
預先感謝您:)
編輯:更多玩弄已經表明我的user_ids陣列確實是一個數組,但只包含一個條目:「25,1」。我解決了我的問題,採取params[:user_ids][0]
並通過逗號分隔符分割,遍歷索引並將每個用戶保存到組關聯。我不認爲這是一個很好的解決方案,仍然希望在沒有操縱的情況下通過直線陣列。
是否有一個原因,你是不是在軌道形式而不是JS使用某種'collection_check_boxes'?這些ID實際上會作爲params散列中的一個數組發送,並且您可以使用內置的方法進行保存等。有一些checkbox的問題,但是您只需要注意數據如何通過。 – Beartech