我为餐馆建立了一个小型系统。
我目前坚持有效列出属于product_type
类型的所有模型:food
,beverages
和apparel_items
。
每种产品类型都有多种属于它们的产品,例如food
有很多wraps
,很多salads
,很多sandwiches
等。
这一点就是为每个产品类型设置一个按钮,根据所选类型的ID,点击后,将所有属于它的模型列为按钮,然后依次点击它们中的任何一个然后列出相关模型的数据库记录。
示例:食品,饮料=>点击食物=>显示按钮:包裹,沙拉和三明治=> click wraps =>列出所有包装
class ProductType < ActiveRecord::Base
has_many :apparel_items
has_many :chapata_items
has_many :combos
has_many :croissants
has_many :fruits
has_many :green_challenges
has_many :hot_drinks
has_many :infusions
has_many :juices
has_many :molletes
has_many :omelettes
has_many :salads
has_many :sandwiches
has_many :shakes
has_many :sincronizadas
has_many :slices
has_many :smooth_drinks
has_many :super_drinks
has_many :water_drinks
has_many :wrap_items
end
如何列出属于另一个模型的所有模型,以便我可以有效地编程?
为每种产品类型(食品,饮料,服装产品)创建模型并仅使这三种产品属于产品类型模型会更好吗?
答案 0 :(得分:1)
您可以使用ActiveRecord::Reflection检查任何模型的关联。
所以Food.reflect_on_all_associations(:has_many)
会返回一个ActiveRecord::Reflection::HasManyReflection
个对象数组,每个食物类型都有一个Food
模型has_many
。每个反射都有一个名称,这是您在声明has_many
关系时设置的名称。
然后,您可以使用这些反射的名称来构建产品列表,如下所示:
food_product_types = Food.reflect_on_all_associations(:has_many).map(&:name)
# 'food_product_types' equals [:wraps, :salads, :sandwiches, etc...]
# Now, create buttons for each food product type
当然,如果您的产品类型的关联不是产品,则需要将其过滤掉。
答案 1 :(得分:1)
您的架构当然可以从一些非规范化中受益。有许多方法可以实现设计,包括建议您为产品组分离模型。
但是,更重要的是,您应该考虑为什么要将所有各种产品放入单独的模型中。它们与使用它们的工作流程的立场真的不同吗?
也许值得保留Product
模型中真正共享的字段集并将所有其他属性放入Attribute
模型中?然后product_type
将成为Product
的一个字段,您将能够以简单明了的方式完成许多精彩的工作。