【发布时间】:2013-08-12 20:42:25
【问题描述】:
我有三个相关模型:
class InventoryItem < ActiveRecord::Base
belongs_to :item, :foreign_key => :item_id
belongs_to :vendor
has_many :shopping_list_items
class ShoppingList < ActiveRecord::Base
has_many :shopping_list_items
belongs_to :user
end
class ShoppingListItem < ActiveRecord::Base
belongs_to :shopping_list
belongs_to :inventory_item
end
我要做的是创建一个侧边栏购物清单,当 InventoryItem 表中的相应属性(同样是价格)发生更改时,它将自动更新 ShoppingListItem 属性(特别是价格)。我的想法是拥有这三个类并将 ShoppingListItems 直接映射到 InventoryItems,但我不确定如何进行。或者,是否可以完全取消 ShoppingListItem 类并使 ShoppingList 成为用户指定的 InventoryItems 的集合?非常感谢任何输入。提前致谢!
【问题讨论】:
-
为什么 ShoppingListItem 有价格属性?它不应该简单地引用其关联的 InventoryItem 的价格属性吗?
-
另外,如果 ShoppingListItem 没有自己的任何属性,那么是的,可以完全取消该模型。您将寻找
has_and_belongs_to_many关系。这仍然需要一个连接表,但它的条目由 ActiveRecord 自动为您管理——您可以执行shopping_list.inventory_items = InventoryItem.where(...)之类的操作,它会正常工作(通常)。 -
我的问题可能措辞不当,但这是我的目标。它们将具有相同的属性,因此我确实喜欢此时摆脱额外模型的想法。所以 InventoryItem 模型应该包含:
has_and_belongs_to_many :shopping_lists是吗? -
参与过一个用户购买代金券的项目,您可能希望 ShoppingListItem 有自己的价格的一个原因是在将商品添加到购物车的确切时间维护价格历史记录,而不是新的价格。但是您似乎在说您确实希望更新价格,所以我同意@Grantovich 的观点,即您应该取消 ShoppingListItem 连接模型。
-
有趣的点卡洛斯,谢谢。为此,我可能不需要任何价格历史记录,但可以为未来的项目考虑(:
标签: ruby-on-rails database activerecord associations