gpt4 book ai didi

ruby-on-rails - 为散列属性创建表单字段

转载 作者:数据小太阳 更新时间:2023-10-29 06:59:04 25 4
gpt4 key购买 nike

我有一个模型产品,它有一个 properties 属性。它将它作为哈希存储在单个数据库列中(在 http://api.rubyonrails.org/classes/ActiveRecord/Store.html 之后)

class Product < ActiveRecord::Base
store :properties
end

如何为这个属性属性(它是一个散列)创建动态表单字段?我对意识形态上正确的方式(“rails way”)很感兴趣。我猜想需要使用 fields_for 助手。但我不完全明白该怎么做。请告诉我解决这个问题的正确方法。

结果,我想得到一个如图所示的工作表格。

enter image description here

用户可以添加无限数量的字段并提供任何属性名称及其值。

最佳答案

rails 方式不需要包含使用单个表的限制,理想情况下,您可以使用 2 个表以非常 rails 的方式执行此操作。继续前进。

在我看来,您不应该为此目的使用 Active Record :store

该实现非常适合开发人员需要存储在代码中灵活但在任何给定时间点定义明确的模型元数据的情况。也就是说,您需要在模型中指定键。

还有一个陷阱,您不能对保存的结果序列化文本运行 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

在 View 中:

<%= 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 %>

然后您还可以添加一个“添加另一个属性”链接,该链接应该使用 JS 插入另一对名称为 product[prop_hash][][name]product[ 的输入prop_hash][][value] 分别。

很久以前,我推出了一个元数据的自定义实现,它将键保存在序列化的 XML 中,原因之一是 - 它可以在 SQL 中查询。我的博客文章的链接http://geniitech.tumblr.com/post/14916592782/storing-metadata-as-xml-hash-in-ror

关于ruby-on-rails - 为散列属性创建表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23090737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com