我是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的原因。
提前致谢。如果问题需要进一步阐述,请告诉我。
答案 0 :(得分:0)
由于您已定义Organizer
或User
belongs_to
和Event
,因此您应该致电event.organizer
或event.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 :organizer
和belongs_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 =
主办方
组织者=