在我的应用程序中有两个模型User和Event。我想关联两个模型,这样一个用户只能创建单个事件,但可以登录其他用户创建的许多事件。
我已尝试过以下协会,但它不适合我
class User < ActiveRecord::Base
has_one :event
belongs_to :event
end
class Event < ActiveRecord::Base
has_many :users
belongs_to :user
end
如何在上述条件下关联两个模型。
答案 0 :(得分:1)
这些关系指的是底层数据库结构。
当您说belongs_to :event
时,Rails会在event_id
表中查找名为users
的列。您告诉每个用户有一个事件,用户将存储与之关联的事件。
当您编写has_one :event
时,Rails将在数据库的user_id
表中查找名为events
的列。您告诉每个用户有一个事件,并且事件模型负责保留与之关联的用户。
如果您希望用户只创建一个事件并让每个事件都属于某个用户,那么您需要以下内容:
class User < ActiveRecord::Base
has_one :event
end
class Event < ActiveRecord::Base
belongs_to :user
end
如果您希望用户能够参加多个活动,您将需要一个仅包含该信息的单独表格。
class EventRegistration < ActiveRecord::Base
belongs_to :event
belongs_to :user
end
然后,您将为要与给定用户连接的每个事件向event_registrations
表添加一个新行。此表将被称为连接表,因为它的主要目的是在其他表中创建记录之间的关系(这是SQL JOIN
语句所做的。)