1

異なる結果(デフォルトと手動)を保存したいので、それぞれの結果に理由があります。これは多形的な関連のためには良い場所だと思っていました。モデルは名前空間を持ちますが、これは予期していたよりもトリッキーなものになりがちです。次the guideRails名前空間との多相関連

アプリ/モデル/イベント/ reason.rb

# id    :integer   not null, primary key 
# reasons   :string 
# reasonable_id :integer 
# reasonable_type :string 
# created_at  :datetime   not null 
# updated_at  :datetime   not null 
# 

class Event::Reason < ActiveRecord::Base 
    belongs_to :reasonable, polymorphic: true 
end 

アプリ/モデル/イベント/ result.rb

class Event::Result < ActiveRecord::Base 
    belongs_to :event 
    has_one :event_reason, as: :reasonable 
end 

アプリ/モデル/イベント/ manual_result .rb

class Event::ManualResult < ActiveRecord::Base 
    belongs_to :event 
    has_one :event_reason, as: :reasonable 
end 

しかし、私のような何かをしようとした場合:

Event::ManualResult.last.event_reason 
    Event::ManualResult Load (5.1ms) SELECT "event_manual_results".* FROM "event_manual_results" ORDER BY "event_manual_results"."id" DESC LIMIT 1 
    NameError: uninitialized constant Event::ManualResult::EventReason 

または

Event::Result.last.event_reason 
    Event::Result Load (0.4ms) SELECT "event_results".* FROM "event_results" ORDER BY "event_results"."id" DESC LIMIT 1 
    NameError: uninitialized constant Event::Result::EventReason 

をそれのadditonal層Event::ManualResult::EventReason内にネストされるように、それは関連付けを期待していると思われるとEvent::Result::EventReason

答えて

5

あなただけの関連付けでclass_nameを指定する必要があります。

class Event::Result < ActiveRecord::Base 
    belongs_to :event 
    has_one :event_reason, as: :reasonable, class_name: 'Event::Reason' 
end 

このようにして、.event_reason(これはこのタイプのケースではできません)からあなたにクラスを推測させてもらうことはできません。

+0

ありがとうございました!私は文字通り同じことをしました!ハイブ5。どのような心ひねり – TheLegend

関連する問題