是否有最佳实践/连贯的方法来更新包含哈希键值存储的数据库字段?
Posted
技术标签:
【中文标题】是否有最佳实践/连贯的方法来更新包含哈希键值存储的数据库字段?【英文标题】:Is there a best practices/coherent way to update a database field that contains a hash key-value store? 【发布时间】:2012-02-16 07:09:27 【问题描述】:我指的是 Rails 3.2 的数据存储功能,其中可以选择在文本字段中存储键值对存储,即使您使用的是 mysql 之类的关系数据库……它在以编程方式运行时也能正常工作操作字段。
但是有哪些文档可以从 RESTful html 表单更新这些字段?或者这是根本不推荐的东西?也就是说,更好的解决方案是使用 NoSQL?
【问题讨论】:
【参考方案1】:如果我理解了这个问题,我想你只需要在模型中声明保存商店的字段名称,以及相关的访问器(属性),比如
store :settings, accessors: [ :weight, :length, :color ]
此时该字段与 AR 和 AREL 一起使用,就像任何其他字段一样,即使是表单也是如此。
这里没有什么魔法。该字段包含值的散列; store 声明让 Rails 知道您可以像 something.weight 或 something.color 一样引用它们,无论是阅读还是写作。简单而光滑。经典的 DHH。
【讨论】:
【参考方案2】:虽然这个问题已经很老了,但其他人可能会觉得它很有用,我在 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,希望对您有所帮助!
【讨论】:
以上是关于是否有最佳实践/连贯的方法来更新包含哈希键值存储的数据库字段?的主要内容,如果未能解决你的问题,请参考以下文章