3

我有 3 个表 ( products, custom_attribute, attribute_value) 需要链接在一起。我有attribute_value_maps一张有product_id,custom_attribute_id和的桌子attribute_value_id

我的产品型号accepts_nested_attributes_for :attribute_value_mapsaccepts_nested_attributes_for :attribute_values.

我的产品表单有一个新的属性值字段,如下所示:

<input id="product_attribute_values_attributes_1_custom_attribute_id" name="product[attribute_values_attributes][1][custom_attribute_id]" value="1" type="hidden">
<input id="product_attribute_values_attributes_1_attribute_value_name" name="product[attribute_values_attributes][1][name]">

控制器是基本的@product.update_attributes(paras[:product])

这会attribute_value正确创建记录,但attribute_value_map记录会保存为 nil custom_attribute_id

问题1:有没有一种简单的方法可以让attribute_value_map记录以custom_attribute_id这种方式正确保存?

问题 2:假设已经有一个地图记录,如果我添加一个带有 name 的输入product[attribute_values_attributes][1][attribute_value_map_id],它只会对我大喊大叫,说这不是一个有效的字段。如何在创建新的属性值时更新现有的地图记录?

编辑 1:要求提供更多详细信息

产品型号:

has_many :custom_attributes, :through => :attribute_value_maps
has_many :attribute_value_maps, :dependent => :destroy
has_man :attribute_values, :through => :attribute_value_maps
accepts_nested_attributes_for :attribute_value_maps
accepts_nested_attributes_for :attribute_values

custom_attribute 模型

has_many :attribute_value_maps

属性值模型

belongs_to :custom_attribute
has_many :attribute_value_maps

属性值映射模型

belongs_to :product
belongs_to :custom_attribute
belongs_to :attribute_value
4

1 回答 1

0

如果我了解您在这里尝试做什么,我想您可能会为使用 ActiveRecord 带来很多痛苦。

这种动态属性是创建 NoSQL 数据库的原因。您可能需要考虑 Mongoid/MongoDB 之类的东西是否是更好的选择:

至少,您可能需要考虑查看 ActiveRecord 的序列化功能:

http://api.rubyonrails.org/classes/ActiveRecord/Base.html查看底部的序列化函数。

如果您使用的是 Postgres,您可能需要查看使用本机数据库格式的 hstore 扩展来允许对属性字段进行索引:

https://github.com/softa/activerecord-postgres-hstore

希望以上内容对您有所帮助:)

于 2012-09-18T08:38:07.500 回答