2012-04-25 17 views
1

私はレールが初めてで、以下のように設定する方法がわかりませんでした。Rails:2つのモデル間のオプションの1対1の関連付けを宣言する方法

私はユーザー、招待状、写真のモデルを持っています。各ユーザは、特定の画像を見るために他のユーザを招待する。ユーザーは他のユーザーに招待状を送信します。招待状は特定の画像にリンクされていても、リンクされていなくてもかまいません。

私の問題は、招待状と画像の間にオプションの関係を関連付ける方法がわからないことでした。

私が持っている:

class Invitation < ActiveRecord::Base 
    has_one :picture 
end 

class Picture < ActiveRecord::Base 
    belongs_to :invitation 
end 

私はinvitation.pictureをしようとするときしかし、私は次のエラーを取得する:

Failure/Error: @user.getsInvited invitation 
    ActiveRecord::StatementInvalid: 
     SQLite3::SQLException: no such column: picture.invitation_id: SELECT "picture".* FROM "picture" WHERE "picture"."invitation_id" = 1 LIMIT 1 

たぶん私は絵のモデルに列の招待を追加する必要がある、しかし、これは必要ですか?写真を送ることは招待状ではオプションかもしれません。また、画像内にinvitation_idという列が1つしかない場合、同じ画像がさまざまな招待状の間で共有されているとどうなりますか?

I.e.各招待状には1つの写真が関連付けられていてもよく、他の招待状には同じ写真が関連付けられてもよい。私は絵が招待状を「認識」して欲しいとは思っていませんでしたが、多対多の関係を作り出すことが必要なのでしょうか?

ありがとうございます!

答えて

3

招待状は、それが接続されているかを知る必要がありますいずれかになります。

class Invitation < ActiveRecord::Base 
    belongs_to :picture # means invitation model has a picture_id column 
end 

class Picture < ActiveRecord::Base 
    has_many :invitations 
end 
+1

この方法で招待状は、オプションの絵を持っている(ちょうど 'picture_id'フィールドを設定しない;)) –

+0

うわー、Iそれが見えなかった!ありがとう! :) – Karan

関連する問題