我知道这是一个(有点)常见的问题,但我是一个新手,我总是很欣赏我一直在思考的问题的第二(或第 100)双眼睛。
我想知道我是否在这里采用了正确的方法——我正在尝试对具有多种变体的产品以及针对该产品销售的相关礼券进行建模。
例如,餐厅的产品可能是“2 人品尝菜单”,而变体可能是“仅食物”、“部分配酒”和“配酒”等(只是一个说明性示例) .
这是我想出的提炼版本:
class Product
include Mongoid::Document
field :name, type: String
has_many :gift_certificates
embeds_many :variations
end
class Variation
include Mongoid::Document
field :name, type: String
embedded_in :product
has_many :gift_certificates
end
class GiftCertificate
include Mongoid::Document
field :recipient, type: String
field :amount, type: Float
belongs_to :product
belongs_to :variation
end
因此,当我们创建 GiftCertificate 时,它被定义为同时属于产品和变体(对吗?)。一个例子可能是“200 美元的礼券,用于 2 种 [产品] 的品尝菜单和部分葡萄酒配对 [变体]”等。
我觉得这里的 Products/Variations 的 embeds_many / embedded_in 关系是理想的,因为它适合什么时候应该使用的配置文件:我永远不会访问没有变体的产品,而且我永远不需要访问独立于 a 的变体产品——它们齐头并进。
所以问题是我这样做是否正确。
我已经设法使用 ryanb 的出色的nested_form gem 将基本的 CRUD 表单按摩到工作中,并进行了一些调整。编辑产品和变体很容易(基本用例),但我在使用礼券时遇到了麻烦。
Mongoid 给我带来了一些麻烦......同时属于产品及其变体的 GiftCertificate 看起来很笨拙,每次查找时我都必须手动设置 GiftCertificate.variation,即
@gc = GiftCertificate.find(params[:id]) // as normal
@gc.variation // ==> nil, doesn't work by itself
@gc.variation = @gc.product.variations.find(@gc.variation_id) // Have to manually set this
@gc.variation // Now this works as it's supposed to
无论如何,在我继续之前 - 很想对上述内容有所了解。
提前致谢!