0

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

<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 辅助方法获得此信息?现在请不要担心模型中的访问器方法,这一切都已经处理好了。万分感谢。

4

3 回答 3

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 %>
于 2010-02-18T19:43:52.473 回答
0

上一个答案提供了一个解决方案,所以我只是提供一些背景信息,说明为什么您所要求的内容无法按照您希望的方式工作。

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

于 2010-02-18T20:53:37.663 回答
0

我正在做类似的事情,听起来你正在寻找序列化。不幸的是,我的问题还没有解决,所以我无法提供更具体的内容。

于 2010-09-03T01:52:19.120 回答