【问题标题】:How to deal with serialized field in rails form如何处理rails形式的序列化字段
【发布时间】:2017-02-10 23:20:38
【问题描述】:

我的模型中有一个序列化字段

class Screen < ActiveRecord::Base
  serialize :options
end

用户应该能够为每条记录添加/编辑 n 个选项。我看到了这个SO question 并尝试了

<%= f.fields_for :options do |o| %>
  <%= o.label :axis_y %>
  <%= o.text_field :axis_y %>
  <%= o.label :axis_x %>
  <%= o.text_field :axis_x %>
<% end %>

但我的问题是我不知道用户要添加哪些字段,用户可以为options 指定可变数量的属性。最好/正确的方法是什么?非常感谢任何帮助。谢谢

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我以前从未见过serialize,所以我查了一下。 Here's一个教程;显然您还需要指定序列化对象的类型:

    serialize :options, Hash
    

    要将哈希属性列入白名单,您有多种选择。

    您可以创建自定义验证器(有关说明,请参阅 here

    您还可以覆盖options= 方法:

    def options=(val)
      whitelisted_keys = ["some", "keys"]
      if val.is_a?(Hash) && val.keys.all? { |key| whitelisted_keys.include? key }
        super
      else
        errors.add(:options, "is invalid")
        self
      end
    end
    

    您可能还需要配置您的 screen_params 方法,因此如果事情不正常,请在您的问题中显示该代码。

    【讨论】:

    • 坦克为您提供帮助。这里真正的问题是如何在表单中使用这个字段。我不能要求我的用户填写哈希
    • 肯定需要 javacript 来做动态表单
    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多