3

は、私は次のモデルがあるとしましょう:Rails3でhas_one関連付けによって子供の親を見つけるにはどうすればよいですか?

class Parent < ActiveRecord::Base 
    has_one :child 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
end 

私は子供を介して親をretriveしたいが、次の操作を実行すると失敗するだろう: 私はコントローラ

@child = Child.find(params[:child_id]) 
を通じて、次のようにモデルを見つけます

私はこのような子供の親を取得したいのですが、私の見解では

(これが関連しているが、私は浅いルーティングを使用しているため、PARENT_IDはURLで利用できない場合わからない):

@child.parent 

これを行うにはどうすればいいですか?

ありがとうございます!


更新:私の例(私が新しいアプリケーションを作成して作成することを決めたとき)は実際には完全に実行されました。 私の実際のアプリでは、子供のモデルにbelongs_to :parentを含めるのを忘れました。私の愚かなこと。コメントして回答する時間をとってくれてありがとう、みんな。次回は質問を投稿する前に、もっと注意深く見ていきます。

+1

'@ child.parent'は動作します。どうしたの? – Zabba

+0

問題は私が十分によく見ていないということです。更新を参照してください。 –

答えて

9

これはまさにあなたのやり方です。

実際に機能していないということは、@childに親が付いていないという根本的な問題があることを示しています。

まず、Childの表に外部キーがあることを確認します。外部キー列(この場合はparent_id)は、belongs_toの関連付けを持つモデルに常に存在する必要があります。

第2に、フェッチしている子が実際に親を持っていることを確認します。これは、外部キー(parent_id)がnilであってはならないことを意味します。数値がある場合は、Parentの表にforeign_keyと同じ値のレコードがChildにあることを確認します。

アソシエーションを再確認するために、Railsコンソール(アプリケーションディレクトリのrails console)を使用することもできます。 Child.first.parentを実行して、何が起こっているかを見てください。もちろん、Parent.first.childChild.find(123).parentなどのパターンを使用することもできますが、paramsは使用できません。

関連する問題