Ruby on rails 如何使用形式为的数组?

Ruby on rails 如何使用形式为的数组?,ruby-on-rails,erb,form-for,Ruby On Rails,Erb,Form For,我有一个用户模型,其中包含一个名为text1的字段。在users/new表单中,我想为该文本设置4个单独的文本框1。在我的模型中,我将从这些框中获取值,并将它们作为逗号分隔的值连接在一起,然后将它们存储在数据库中。为了让你明白,这就是我想要的 <input type="text" name="user[text1][]" /> <input type="text" name="user[text1][]" /> <input type="text" name="us

我有一个用户模型,其中包含一个名为text1的字段。在users/new表单中,我想为该文本设置4个单独的文本框1。在我的模型中,我将从这些框中获取值,并将它们作为逗号分隔的值连接在一起,然后将它们存储在数据库中。为了让你明白,这就是我想要的

<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 helper方法获取此信息?现在,请不要担心模型中的访问器方法,这些都已经处理好了。非常感谢。

为您的
用户
模型添加一些虚拟属性

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  
class用户
在视图代码中,使用新属性而不是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 %>

#一些代码
#一些代码

前面的答案给出了一个解决方案,所以我只是提供了一些背景知识,说明为什么您所要求的东西没有按照您可能希望的方式工作


您确实可以创建一个具有多个同名输入字段的表单,并且该数据将被发布。但是,当rails收到post时,它会自动参数化post数据和/或url参数。它实质上在&上拆分,并将键/值对分配给params散列。这样做的结果是params[:user][:text1](来自您的示例)将具有它遇到的用户[text1]的最后一个实例的值,因为它只是对现有键的赋值。您可能想深入研究ActiveRecord多参数分配,了解datetime属性的工作原理,因为它们与您的用例类似。

我正在研究类似的内容,听起来您可能正在寻找序列化。不幸的是,我的问题还没有解决,因此我无法提供更具体的信息。

谢谢您的回复。但这不是一种工作吗?这不是有一个明确的方法吗?此外,如果表单未能通过模型中的验证并再次加载,我希望文本框中自动填入提交前输入的值。您的方法需要我另外编写代码,将text1的内容拆分到其他三个文本框中。我只是想知道rails是否有内置的东西来处理表单中这样的数组。谢谢。在重新加载表单中,值将保留为
零件
字段是模型上的虚拟属性。对于您的场景来说,这是一种合理的做法,因为您正在显示的内容并不是您正在保存的内容。