我指的是 Rails 3.2 的数据存储功能,其中可以选择将键值存储存储在文本字段中,即使您使用的是 MySQL 之类的关系数据库……它在以编程方式操作字段时也能正常工作.
但是有哪些文档可以从 RESTful HTML 表单更新这些字段?或者这是根本不推荐的东西?也就是说,更好的解决方案是使用 NoSQL?
我指的是 Rails 3.2 的数据存储功能,其中可以选择将键值存储存储在文本字段中,即使您使用的是 MySQL 之类的关系数据库……它在以编程方式操作字段时也能正常工作.
但是有哪些文档可以从 RESTful HTML 表单更新这些字段?或者这是根本不推荐的东西?也就是说,更好的解决方案是使用 NoSQL?
如果我理解这个问题,我认为您只需要在模型中声明保存商店的字段名称以及相关的访问器(属性),例如
store :settings, accessors: [ :weight, :length, :color ]
在这一点上,该字段与 AR 和 AREL 一起使用,就像任何其他字段一样,即使是表单也是如此。
这里几乎没有魔法。该字段包含值的散列;store 声明让 Rails 知道您可以像 something.weight 或 something.color 一样引用它们,无论是阅读还是写作。简单而光滑。经典的 DHH。
虽然这个问题已经很老了,但其他人可能会觉得它很有用,我在 ruby 和 rails 中也很新,所以可能有更好的方法来做到这一点。
在模型中:
#user.rb
attr_accessible :preferences
store :preferences
然后以部分形式:
#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 %>
现在从我在模型中创建 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,希望对您有所帮助!