2010-12-03 11 views
1

私はレールコンソールで動作するが、私が間違ってやっているサイトを実行していないのですか?belongs_toアソシエーションのアソシエート

class C < ActiveRecord::Base 
    belongs_to :b 
end 

class B < ActiveRecord::Base 
    belongs_to :a 
    has_many :c 

    def title 
    a.title 
    end 
end 

表CはBへの外部キーを持っており、Bは、これはレールコンソールで動作A.

への外部キーを有します。

c = C.find(12) 
c.b.title 

ただし、サイトを実行すると機能しません。ここ

Iは

NoMethodError (undefined method `title' for #<ActiveRecord::Associations::BelongsToAssociation:0x104feb5a0>): 
+0

サイト内で使用する際にエラーメッセージが表示されますか? –

+0

'a'シンボルを間違って入力しましたか?それは ':a'ではなく 'a:'でなければなりません。 – Alex

+0

私はa:typoを修正し、実際のエラーを追加しました。 – MHinton

答えて

-1

私はそれを動作させるために、クラスメソッドにクラスBのタイトル方法を回す必要がありました。

+0

奇妙な...どんな考え? –

+0

いくつかのコードを表示できますか? –

0

has_oneの取得エラーです(association_id、オプション= {}) は、別のクラスと一対一関連 を指定します。他のクラス に外部キーが含まれている場合にのみ、このメソッドは を使用する必要があります。 現在のクラスに外部の キーが含まれている場合、belongs_to を代わりに使用する必要があります。 ActiveRecord :: Associations :: ClassMethodsの has_oneを使用する場合の概要とbelongs_toを使用する場合の を参照してください。

+0

私は元々私の質問にhas_manyの関連付けを追加するのを忘れていました。 – MHinton

3

これを行う方法を定義するのではなく、delegateapp/models/c.rbで:

app/models/b.rb
delegate :title, :to => :b 

そして:

delegate :title, :to => :a 
関連する問題