2012-04-25 61 views
1

我是rails新手,不确定如何设置以下内容。Rails:如何声明两个模型之间的可选一对一关联

我有用户,邀请和图片模型。每个用户都可以邀请其他用户查看特定图片。用户向其他用户发送邀请;邀请可能与特定图片相关联,也可能与某个图片没有关联。

我的问题是我不知道如何关联邀请和图片之间的可选关系。

我:

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列,如果在各种邀请之间共享相同的图片,会发生什么情况?

I.e.每个邀请可以具有与其关联的单个图片,并且其他邀请可以具有与其相关联的相同图片。我不希望图片“知道”邀请,但也许我必须创建一个多对多的关系?

谢谢!

回答

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'场;)) – 2012-04-25 19:32:07

+0

哇,我没有看到即将到来!谢谢! :) – Karan 2012-04-25 19:38:22

相关问题