2011-08-16 22 views
1

UserモデルとHouseモデル(これはグループのようなものです)を持つRails 3.1アプリがあります。私は、これらの2つのモデルの間の結合モデルMembershipとの多対多の関係を設定しました。また、結合モデルの一部の家でユーザーの役割を管理するメソッドがあります。特定の1対多の関係

しかし、私の問題は、ユーザーには家が1つしかなく、多くはないということです。だから私はいつも彼の家を得るためにuser.houses.firstをやらなければならないが(私はそれを行うヘルパーハウスをセットアップした)、デザインは良くないのでhas_many :membershipshas_many :houses, :through => :membershipsの代わりにhas_one :membershiphas_one :house, :through => :membershipを入れようとした。しかし、私がUserから家にアクセスしようとするたびにエラーが発生しました。

私がやろうとしていたように、この1対多の関係を結合テーブルとどのように設定することができますか?

ありがとうございます。

+0

あなたのDBモデルでは、ユーザーは1つの家しか持たないのでしょうか? – Cygnusx1

答えて

2

1対多のリレーションシップを使用する場合は、アソシエーションが必要です。

ハウス

にhas_many:メンバーシップ

にhas_many:ユーザー、:=>を通じて:メンバーシップ

ユーザー

にhas_one:membersh IP

にhas_one:家、:を通じて=>:会員

+0

それは私が試みたものだが、うまくいかなかった... – Cydonia7

+1

"うまくいかなかった"とはどういう意味ですか?それは私のために有効に見えます。 – socjopata

+0

エラーメッセージが表示されます。しかし今は、サーバーを再起動した後に動作します。 – Cydonia7

0

私はしかし、あなただけのユーザーに家を定義し、その後、複数のままにしてできた、関係でこれを行う方法を考えることはできません。

class User 
    has_many :memberships 
    has_many :houses, :through => :memberships 

    def house 
    houses.first 
    end 
end 
+0

'house ='も 'delete_all'と' << 'で実装しようとしましたが、これはちょっと難しいですね。 – Cydonia7

+0

あなたは家をするだけでは不十分ではありませんか?[new_house] – Yule

+0

@Skydreamerそれは扱いにくいですが、あなたのスキーマは1対多の関係のためには適切ではありません。 – Serabe