2012-04-17 7 views
1

2つのモデルPersonHouseを持つレールアプリがあるとします。各PersonオブジェクトにはHouse_idプロパティがあります。レールの範囲find_by_idメソッド

私は私のPersonモデルの内部で以下のメソッドを定義したいと思います:

def locate_house 
    current_house_id = house.find_by_id(person) 
end 

しかし、私はhouseのための未定義の変数のエラーを取得していますが、どのように私はこれが範囲内であることを保証することができますか?

+1

私はあなたの 'locate_house'がやろうとしていることについて本当に混乱しています。あなたは関連する家を取得するために 'person.house'を実行することができます... –

+0

この場合、モデル関連はありません。 'person'には 'house_id'プロパティしかありません。 –

+0

次に、関係を定義します。私の答えを見てください。 –

答えて

2

すでにレールに組み込まれているものを書き直そうとしています。 belongs_toの関係を使用します。

class Person < ActiveRecord::Base 
    belongs_to :house 
end 

次に、あなただけの行うことができます。

person.house 

関連した住宅を取得するには。

+0

...これは正しい方法です。 – rjz

+0

JSONを使ってPersonオブジェクトを作成し、ネストされたモデルを使用しないと仮定すると、唯一のことは 'house_id'です。正しい家が使用されるようにするにはどうすればよいですか? –

+0

house_idに任意の場所を入力すると、関係が保持されます。しかし、フォームからの信頼できないデータの受け入れとIDの割り当てには注意が必要です。これはセキュリティ上の脆弱性です。 –

1

あなたmodel-- Houseは総額

def locate_house 
    current_house_id = House.find_by_id(person) 
end 
+0

@Andrewこれが関連を定義する代わりに行く方法であっても(私は想像できません)、完全な本物のオブジェクトを '_id'で終わる名前の変数に割り当てることに注意してください。頭痛スタイルのバグを簡単に引き起こす方法。 –

+0

「想像している」ビット。真剣に。 @ベンの答えは、ラインの下で無数の頭痛を保存します。 – rjz

0

ハウスを必要とルビー定数を--isは定数であり、他の誰かのように大文字が必要なActive Recordのモデル間の関係に関するRailsのガイドを見て、言いました。多くの可能なrealtionshipsがあります、あなたが探しているものが多分あります。実際には、人は複数の家を持つことができます。

関連する問題