如何在form_for中使用数组?

时间:2010-02-18 18:21:25

标签: ruby-on-rails erb form-for

我有一个用户模型,其中包含一个名为text1的字段。在用户/新表单中,我希望为此text1提供4个单独的文本框。在我的模型中,我将从这些框中获取值并将它们连接在一起作为逗号分隔值并将它们存储在DB中。为了让你理解,这就是我想要的。

<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />
<input type="text" name="user[text1][]" />

如何使用form_for帮助方法获得此功能?现在请不要担心模型中的存取方法,这一切都得到了解决。非常感谢。

3 个答案:

答案 0 :(得分:1)

为您的User模型添加少量虚拟属性

class User < ActiveRecord::Base
  attr_accessor :text1_part1  
  attr_accessor :text1_part2  
  attr_accessor :text1_part3  
  attr_accessor :text1_part4

  def before_validation
      self.text1 = "#{self.text1_part1}#{self.text1_part2}#{self.text1_part3}#{self.text1_part4}"
  end
  # make sure you fill the correct values for
  # the text parts for an existing record.
  # This can be done by implementing `after_find` or overriding
  # `text1=`.
end  

在您的视图代码中使用新属性而不是text1

<% form_for(:user) do |f| %>
   #some code
   <%= f.text_field :text1_part1>
   <%= f.text_field :text1_part2>
   <%= f.text_field :text1_part3>
   <%= f.text_field :text1_part4>
   #some code
   <%= f.submit "Save">
<% end %>

答案 1 :(得分:0)

之前的回答提供了一个解决方案,所以我只是提供一些背景知道为什么你要求的东西不能按照你希望的方式工作。

您确实可以创建一个具有相同名称的多个输入字段的表单,并且将发布该数据。但是,当rails收到帖子时,它会自动参数化后期数据和/或url参数。它基本上分裂了&amp;并将键/值对分配给params散列。结果是params [:user] [:text1](来自您的示例)将具有它遇到的用户[text1]的最后一个实例的值,因为它只是对现有键的值赋值。您可能希望深入了解ActiveRecord多参数分配,以了解日期时间属性的工作原理,因为它们与您的用例类似。

答案 2 :(得分:0)

我正在研究类似的东西,听起来好像序列化就是你要找的东西。不幸的是我还没有解决我的问题,所以我无法提供更具体的内容。