[英]How to include an array into params for model backed form
我有一個復雜的模型支持表單,想在我的參數中包含多個對象。
我的設置:
Network.rb
class Network < ActiveRecord::Base # t.string "name"
has_many :trackings
has_many :installations, through: :trackings
end
Installation.rb
class Installation < ActiveRecord::Base # t.string "name"
has_many :trackings
has_many :networks, through: :trackings
end
Tracking.rb
class Tracking < ActiveRecord::Base # t.string "code
belongs_to :network # t.integer "network_id",
belongs_to :installation # t.integer "installation_id
end
創建新的跟蹤對象時,我想呈現數據庫中的每個網絡並為:code添加一個文本字段。
我的表格:
= form_for [:admin, @tracking] do |f|
= f.select :installation_id, options_for_select(Installation.all.map { |i| [i.name, i.id] }), prompt: "Select an Installation"
- Network.all.each do |network|
= f.text_field :code
= f.submit
當前,所有文本字段都被渲染,但是當我提交時,只有最后一個文本字段的最后輸入進入我的參數。 如何包含所有這些?
對於非模型支持的表單,我發現了這一點,但不適用於我的表單:
= text_field_tag "tracking[][code]"
問題在於,渲染視圖時,所有視圖都轉換為適合HTML PUT的格式,該格式不支持數組。 您需要為每個代碼字段分配一個不同的名稱,也許在定界符之后將數組索引附加到每個代碼的末尾(例如:code-2
)。 每個值將具有其自己的參數。 發布表單后,您可以使用定界符分割名稱以查找以post
開頭的名稱,並取回數組索引,以便再次將其分配給數組。
問題在於網絡的每個迭代中的所有表單字段都具有相同的名稱,因此它們都被映射到輸入哈希中的相同位置...這就是為什么您僅看到最后一個條目的原因。
如果你做...
=text_field_tag "admin[][code[][#{network_id}]]"
...您將獲得以network_id
返回的code
,其中network_id
為鍵,用戶輸入為值。 因此,您將獲得可以操縱的單獨值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.