我的模型中有序列化字段
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
指定可变数量的属性。这样做的最佳/正确方法是什么?任何帮助非常感谢。感谢
答案 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
方法,因此如果无法正常工作,请在您的问题中显示该代码。