如何处理rails形式的序列化字段

时间:2016-10-03 03:56:09

标签: ruby-on-rails ruby

我的模型中有序列化字段

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指定可变数量的属性。这样做的最佳/正确方法是什么?任何帮助非常感谢。感谢

1 个答案:

答案 0 :(得分:0)

我之前从未见过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方法,因此如果无法正常工作,请在您的问题中显示该代码。