ポリモーフィック フィールドで mongoid-3.0.6 を使用すると問題が発生します。rails 3.2.8 と ruby 1.9.3 を使う
通常のポリモーフィック リレーションを使用する:
class Shirt
include Mongoid::Document
field :name, localize: true
belongs_to :itemizable, polymorphic: true
end
class Item
include Mongoid::Document
field :price, type: Float
field :quantity, type: Integer, :default => 1
has_one :product, as: :itemizable
accepts_nested_attributes_for :product
end
メタデータを介して同じ関連付けを利用できます。
>> Item.reflect_on_association(:product)
#<Mongoid::Relations::Metadata
autobuild: false,
class_name: Product,
cyclic: nil,
dependent: nil,
inverse_of: nil,
key: _id,
macro: has_one,
name: product,
order: nil,
polymorphic: true,
relation: Mongoid::Relations::Referenced::One,
setter: product=,
versioned: false>
>> item = Item.new
#<Item _id: 50606c1668ce87692e000003, _type: nil, created_at: nil, updated_at: nil, deleted_at: nil, price: nil, quantity: 1>
しかし、私が走るとき
>> item.product = Shirt.new or >> item.build_product
私はいつも同じエラーが発生しました
NameError: uninitialized constant Product
何かご意見は?
前もって感謝します。
解決済み
- 動機を見つけた
class_name をリレーションに追加する必要があります
has_one :product, as: :itemizable, class_name: "Toy"