如何在rails中关联模型

时间:2015-09-16 18:30:30

标签: ruby-on-rails

在我的应用程序中有两个模型User和Event。我想关联两个模型,这样一个用户只能创建单个事件,但可以登录其他用户创建的许多事件。

我已尝试过以下协会,但它不适合我

class User < ActiveRecord::Base
  has_one :event
  belongs_to :event
end

class Event < ActiveRecord::Base
  has_many :users
  belongs_to :user
end

如何在上述条件下关联两个模型。

1 个答案:

答案 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语句所做的。)