我知道这是一个(有点)常见的问题,但我是一个新手,我总是欣赏第二眼(或第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时,它被定义为属于产品和变体(这是正确的吗?)。一个例子可能是“2份[产品]品尝菜单的200美元礼券,含有部分葡萄酒配对[变种]”等。
我觉得这里的embeds_many / embedded_in关系对于产品/变体是理想的,因为它适合应该使用的时间:我永远不会访问没有变化的产品,我永远不需要访问变体独立于产品 - 它们齐头并进。
所以问题是我是否以正确的方式这样做。
我已经设法使用ryanb的优秀nested_form宝石按摩基本的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
无论如何,在我继续之前 - 会喜欢对上述内容有所了解。
提前致谢!