你好!只能使用两个Rails模型,User和 事件:
Users
|id |name |age |
|1 |danilo |26 |
|2 |joe |23 |
|3 |carlos |50 |
|4 |katy |45 |
Events_Users
|event_id |user_id |confirmed |
|1 |1 |1 |
|3 |3 |0 |
|4 |3 |1 |
|2 |3 |1 |
Events
|id |name |date |
|1 |the end of the year |31/12/2012 |
|2 |the end of the world |21/12/2012 |
|3 |Party |18/12/2012 |
|4 |Dinner |19/12/2012 |
问题是,用户可以确认他们是否存在 事件,为此我使用了表Events_Users,列确认(1为 确认)。如何在没有模型的情况下使用Rails ActiveRecord执行此操作 “Event_User”?如何操作用户中的已确认列 模型?
我正在使用Rails 3.2.9
答案 0 :(得分:5)
User
和Event
有many-to-many
关系,您不能仅使用2个模型设置此关联,您必须具有连接模型或连接表。
在您的情况下,您添加了属性confirmed
,因此您需要一个名为确认的加入模型(如其他人推荐的那样)。您的定义关联将如下所示:
class User
has_many :events, through: :confirmations
has_many :confirmations
end
class Event
has_many :users, through: :confirmations
has_many :confirmations
end
class Confirmation
belongs_to :user
belongs_to :event
end
答案 1 :(得分:3)
不使用用户模型,而是使用关系
has_and_belongs_to_many :events
并修改连接表Events_Users(它有点脏)
最好使用带有两个 belongs_to 关系的模型确认:
belongs_to :user
belongs_to :event
我希望这可以帮到你, 的Alessandro
答案 2 :(得分:0)
由于您在连接表上有额外字段,因此您需要一个连接模型。看看这个:
class User
has_many :invitations
has_many :invited_events, -> {where(confirmed: false)}, class_name: 'Event', through: :invitations
has_many :confirmed_events, -> {where(confirmed: true)}, class_name: 'Event', through: :invitations
end
class Event
has_many :invitations
has_many :invited_users, -> {where(confirmed: false)}, class_name: 'User', through: :invitations
has_many :confirmed_users, -> {where(confirmed: true)}, class_name: 'User', through: :invitations
end
class Invitation
belongs_to :user
belongs_to :event
end
这样,user.confirmed_events
将仅在连接表中将确认标志设置为true的位置提供用户事件。