2009-06-29 9 views
1

いいえ。だから私はa、b、cという3つのモデルを持っています。 a has_one c、b has_many cs、cはaとbの両方に属します。 bのメソッドで "cs"を参照すると、うまくいきます。しかし、私が "a"のメソッドで "c"を参照すると、参照を見つけることができません。 "c"は "未定義のローカル変数またはメソッド"です。私はを知っています。これらのオブジェクトはMySQLデータベースに表示され、bモデルから完全にアクセスできますが、モデルからアクセスできません。Ruby on Railsでこのクラスが見つからないのはなぜですか?

+0

関連するすべての関連付けを含むコード。 –

+0

コードが転記されました。 –

+1

質問を編集して回答を投稿するのではなく、回答を削除してください。 –

答えて

0

<のActiveRecord ::基本 has_oneのクラス:C:依存し=>:破壊

クラスB <のActiveRecord ::ベース にhas_many:クラスC <のActiveRecord ::ベースbelongs_toの

C

: belongs_toの:B

はas_controller方法を作成します。

def create @a = a.new(params [:a]) params [:b] [:venue_id] = get_venue_id_for_b params [:venue] [:name] .blank? @ a.user = @user @ a.b = B.new(params [:b]) @b = @ a.b @ b.valid? @ a.valid?

respond_to do |format| 
    if @a.valid? and @b.valid? 
    if (@a.duplicate? or @a.save) and @b.save 
     flash[:notice] = 'a was successfully created.' 
     format.html { redirect_to a_url(@a) } 
     format.xml { head :created, :location => a_url(@a) } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml } 
    end 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml } 
    end 
end 

モデルB内のこの方法は、動作:

はモデルA内でこの方法が機能しない

デフQ プット端 cs.class:DEF

q puts c.class end

+0

何が起こっているのかまだ分かりません。私はあなたの外来キーが正しく指定されていると仮定しています。例えば。 Cテーブルには2つのキー "a_id"と "b_id"が必要です。つまり、あなたのCモデルでは、 "has_many:c"は意味をなさない。複数のフォーム "has_many:cs"を使用します。 –

1

あなたの問題は、あなたの関係の仕様から来ています。

あなたが正常にクエリを実行できるようにする必要があり、これらの線

class a < ActiveRecord::Base 
    has_one :c, :through=>:b 
end 


class b < ActiveRecord::Base 
    has_many :c 
end 


class a < ActiveRecord::Base 
    belongs_to :b 
end 

に沿って何かを探しているようです。お役に立てれば。

関連する問題