Active Record Store 允许您在单个单元格内序列化参数。
IE
class User < ActiveRecord::Base
store :options, accessors: [ :option1, :option2, :another_random_option ]
end
现在,所有访问器都在 users 表的“选项”列中序列化。
u = User.new
u.option2 = 'some option'
u.option2 # => 'some option'
这对我的应用程序非常有用,因为我必须每天创建许多表单,其中 90% 的表单是相同的(用户名、爱好、兴趣等),然后 10% 是无模式的(random_option_here、another_random_option_in_another_form) . 我也不需要按无模式选项进行排序。
我所做的是我为始终相同的 90% 的表单字段创建了 1 个表,然后我有另一个包含最后 10% 字段的表(我有另一个表的原因是因为这是一个 belongs_to 关系,因此用户可以在此表中有很多行)。
<%= form_tag do %>
<%= #render partial form for an object that has non-changing fields %>
...
<%= #render a schema-less partial form based off an ID passed here %>
<% end >
现在唯一的问题是,每次我在自定义表单中创建一个新字段时,我都必须将该参数添加到 Active Record Store 访问器中,否则我会收到一个方法丢失错误。如果我可以进入并为无模式字段创建尽可能多的视图表单,并且永远不会更新模型中的访问器,那就太好了。
所以我的问题是:无论如何,是否可以将所有用户提交的自定义字段动态添加到访问器数组中,这样如果用户提交了字段“some_random_option1221”,“another_option_here”,那么我就不必进入访问器数组并添加那个领域?
谢谢!