【问题标题】:Rails Dynamic form - Adding serializable fields to a formRails 动态表单 - 向表单添加可序列化字段
【发布时间】:2012-06-27 08:04:35
【问题描述】:

我有一个UserSettingSetting 有一个名为 :serializable 的字段 :custom_links

Setting.rb

  serialize :custom_links, Hash

User.rb

has_one :setting, dependent: :destroy

我想创建一个表单,允许用户设置任意数量的自定义链接,并将这些链接存储在 :custom_links 哈希中。每个自定义链接在哈希中都有一个名称和一个 URL。

我不确定如何在视图中构建此表单并允许用户使用 javascript 动态添加任意数量的自定义链接(并将这些链接保存在 :custom_links 哈希中)。我在:setting 中还有其他字段,并且我的控制器可以很好地处理这些字段 - 我认为我唯一需要帮助的是视图和 javascript。

更新说明:

当用户填写表单以输入:custom_links 时,我希望它采用以下格式:

{
:name => "Google", :url => "http://www.google.com",
:name => "Twitter", :url => "http://www.twitter.com"
}

另外,我希望能够为用户想要输入的每个 :custom_link 动态添加 2 个文本字段。

感谢所有帮助。

谢谢

【问题讨论】:

  • 使用序列化属性是硬性要求吗?您可以添加has_many :custom_links 关联并使用嵌套属性将它们嵌套在主设置表单下。对它们进行序列化与 Rails 提供的内容背道而驰,从长远来看通常会导致更多的痛苦。另外,我认为您想要一个序列化的数组而不是哈希(对吗?)。您在更新中添加的哈希没有任何意义,因为它有重复的键。
  • 我想我可以,但我只是不想过度使用模型。不确定在这种情况下什么是正确的,但我认为序列化对象会更好。此外,格式(哈希或数组)对我来说也并不重要。
  • 序列化它们没有什么问题,但由于它是一个集合(不是散列),所以使用 Rails 提供的东西是有意义的。请参阅下面的答案。

标签: ruby-on-rails ruby-on-rails-3 serialization


【解决方案1】:

我建议将这些链接添加为单独的模型(例如has_many :custom_links)。另外,您将能够使用 AR 的验证,而不是为序列化属性创建自己的自定义验证方法。

您可以将nested attributes 用于这些字段。看看以下 railscasts 剧集:

第二个还向您展示了如何使用 javascript 动态添加更多字段。

【讨论】:

  • 是的。看起来是最好的选择。谢谢。
  • 使用 Railscasts 197 成功实现。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 2015-02-14
  • 2012-08-17
  • 1970-01-01
相关资源
最近更新 更多