我指的是Rails 3.2的数据存储功能,即使您正在使用关系,也可以选择将键值存储存储在文本字段中像MySQL一样的数据库......在以编程方式操作字段时它可以正常工作。
但是有哪些文档可以从RESTful HTML表单更新这些字段?或者这是不推荐的东西?也就是说,更好的解决方案是去NoSQL吗?
答案 0 :(得分:0)
如果我理解了这个问题,我认为你只需要声明持有商店的字段名称,以及模型中相关的访问者(属性),例如
store :settings, accessors: [ :weight, :length, :color ]
此时,该字段与AR和AREL一样,即使使用表单,也可与其他字段一起使用。
这里的魔力很少。该字段包含值的哈希值;商店声明让Rails知道你可以像thing.weight或something.color一样引用它们,无论是阅读还是写作。简单而光滑。经典DHH。
答案 1 :(得分:0)
虽然问题很老,但其他人可能觉得它很有用,而且在ruby和rails中也是新的,所以可能有更好的方法来做到这一点。
在模型中:
#user.rb
attr_accessible :preferences
store :preferences
然后以形式partial:
#views/users/_form.rb
<% @user.preferences.each do |k, v| %>
<% form.fields_for :preferences, @user.preferences[k] do |p| %>
<div class="field">
<%= p.label k %>
<br/>
<%= p.text_field k, :value => v %>
</div>
<% end %>
<% end %>
现在在模型中添加一些额外的字段:ive在模型中创建了2个attr_accessor:
attr_accessible ... , :new_pref_key, :new_pref_val
attr_accessor ... , :new_pref_key, :new_pref_val
然后在表单上添加了2个新字段
<%= f.label :new_pref_key %>
<%= f.text_field :new_pref_key %>
<%= f.label :new_pref_val %>
<%= f.text_field :new_pref_val %>
在我的控制器上,我创建了一个检查新字段是否存在的函数,然后将prefs的先前值与新的字段合并,如下所示:
#users_controller.rb
...
new_key = params[:user][:preferences][:new_pref_key]
new_val = params[:user][:preferences][:new_pref_val]
new_preference = {
new_key => new_val
}
current_params = params[:user][:preferences].merge! new_preference
...
完成后我将其返回并传递给update_attributes,希望它有所帮助!