【问题标题】:How to include an array into params for model backed form如何将数组包含到模型支持表单的参数中
【发布时间】:2013-08-04 22:24:14
【问题描述】:

我有一个复杂的模型支持表单,并希望在我的参数中包含多个对象。

我的设置:

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

当我创建一个新的 Tracking-Object 时,我想渲染数据库中的每个网络并为 :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]"

【问题讨论】:

    标签: ruby-on-rails ruby forms nested-forms params


    【解决方案1】:

    问题是网络的每次迭代中的所有表单字段都具有相同的名称,因此它们都映射到输入哈希上的相同位置...这就是为什么您只能看到最后一个条目。

    如果你这样做......

    =text_field_tag "admin[][code[][#{network_id}]]"
    

    ...您将得到code 作为散列返回,network_id 作为键,用户输入作为值。因此,您将获得可以操作的单独值。

    【讨论】:

    • 但是我怎样才能在 form_for 中包含这个呢?
    • 您可以在 form_for 块中包含 text_field_tag,它不会造成任何伤害,并且数据仍将包含在返回的参数中。
    • 谢谢,不知道我可以在 form_for 块中包含 text_field_tag。
    【解决方案2】:

    问题是,当一个视图被渲染时,它都被转换成适合 HTML PUT 的格式,它不支持数组。您需要为每个代码字段分配不同的名称,可能在分隔符后将数组索引附加到每个代码字段的末尾(例如:code-2)。然后每个值都有自己的参数。表单发布后,您可以使用分隔符拆分名称以查找以 post 开头的名称,并取回数组索引,以便再次将其分配给数组。

    【讨论】:

    • 如何添加数组索引?
    • 这就是我喜欢 S.O. 的原因。史蒂夫的答案更好,你应该选择那个。现在,如果你能原谅我,我需要去更新一些我自己的代码来使用他的方法......
    猜你喜欢
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多