积极记录协会 - 似乎无法使其发挥作用

时间:2016-02-22 03:20:25

标签: ruby-on-rails ruby

我是Rails(4.2.4)上Ruby(2.2.3)的新手,我正在尝试设置以下Active Record Association:

class Event < ActiveRecord::Base
   belongs_to :organizers, class_name: "User"
end

class User < ActiveRecord::Base
  has_many :organized_events, class_name: "Event", foreign_key: "organizer_id"
end

当我使用关联u.events时,(其中u = User.first作为示例)我成功获得与该用户关联的事件列表。但是当我使用e.organizers(其中e = Event.first作为例子)时,即使有一个与事件e相关联的组织者(并且组织者在事件表中有一个正确的外键组织者id),我也会返回Nil。

不确定出了什么问题。感谢您是否可以提供一些有关e.organizers没有返回有效组织者但只返回nil的原因。

提前致谢。如果问题需要进一步阐述,请告诉我。

2 个答案:

答案 0 :(得分:0)

由于您已定义OrganizerUser belongs_toEvent,因此您应该致电event.organizerevent.user

为了让事情变得简单,为什么不尝试以下内容(因为你真的不需要在这种简单的关联中指定class_name和FK(我个人觉得)。

class Event < ActiveRecord::Base
   belongs_to :user
end

class User < ActiveRecord::Base
  has_many :events
end

如果您更喜欢指定的命名,那么为什么不:

class Event < ActiveRecord::Base
   belongs_to :organizer 
end

class Organizer < ActiveRecord::Base
  has_many :events
end

请注意以上示例belongs_to :organizerbelongs_to :user中的单数。

答案 1 :(得分:0)

要获得电子组织,以下更改有效:

class User < ActiveRecord::Base
 has_many :organized_events, class_name: "Event"
 end

class Event < ActiveRecord::Base
  has_and_belongs_to_many :organizers, class_name: "User"
end

class EventsUsers < ActiveRecord::Migration
create_table :events_users, id: false do |t|
  t.belongs_to :user, index: true
  t.belongs_to :event, index: true
end
end

如上所述更改Active Record关联,允许我获得e.organizers。

我通过pry-rails调试器检查了生成的关联,并且能够确认相同的内容:

事件:: GeneratedAssociationMethods#方法: organizer_ids
organizer_ids =
主办方
组织者=