簡體   English   中英

如何在模型支持的形式的參數中包含數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM