Mol*_*far 7 ruby activerecord ruby-on-rails ruby-on-rails-4
我有一个模型产品,它有一个属性属性.它将它作为哈希存储在单个数据库列中(在http://api.rubyonrails.org/classes/ActiveRecord/Store.html之后)
class Product < ActiveRecord::Base
store :properties
end
Run Code Online (Sandbox Code Playgroud)
如何为此属性属性(这是一个哈希)创建动态表单字段?我对意识形态正确的做法感兴趣("轨道方式").我想有需要使用fields_for帮助器.但我不完全明白该怎么做.请告诉我解决这个问题的正确方法.
结果,我想得到一个像图像所示的工作表格.

用户可以添加无限数量的字段并提供任何属性名称及其值.
Var*_*hra 10
rails方式不需要包括使用单个表的限制,理想情况下,您可以使用2个表以非常有轨的方式执行此操作.继续.
:store在我看来,你不应该为此目的使用Active Record .
对于开发人员需要存储灵活的代码但在任何给定时间点定义良好的模型元数据的情况,该实现非常理想.也就是说,您需要在模型中指定键.
还有另一个陷阱,您无法对保存的结果序列化文本运行SQL查询.
如果你坚持,你可以这样做:
在你的模型中:
class Product < ActiveRecord::Base
store :properties
def prop_hash
self.properties.collect{|k,v| [k,v]}
end
def prop_hash=(param_hash)
# need to ensure deleted values from form don't persist
self.properties.clear
param_hash.each do |name, value|
self.properties[name.to_sym] = value
end
end
end
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= form_for @product do |f| %>
<% f.object.prop_hash.each do |k,v| %>
<%= text_field 'product[prop_hash][][name]', k %>
<%= text_field 'product[prop_hash][][value]', v %>
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
然后你还可以添加一个'添加另一个属性'链接,它应该使用JS来插入另一对带有名称product[prop_hash][][name]和输入的输入product[prop_hash][][value].
很久以前,我已经推出了元数据的自定义实现,它将密钥保存在序列化XML中,原因之一是 - 它可以在SQL中查询.我的博客文章的链接http://geniitech.tumblr.com/post/14916592782/storing-metadata-as-xml-hash-in-ror
| 归档时间: |
|
| 查看次数: |
7450 次 |
| 最近记录: |