has_many通过不同的外键

时间:2013-12-11 20:17:46

标签: mysql ruby-on-rails

我正在尝试从User中获取事件,其中EventView.promoter_id = User.id但它无法正常工作。这是我的设置(目前不正确):

User
has_many :events
has_many :promoted_event_views, :foreign_key => :promoter_id, :class_name => "EventView"
has_many :promoted_events, :through => :event_views, :foreign_key => :promoter_id #foreign key seems to be getting ignored

EventView
belongs_to :event
belongs_to :promoted_event, :class_name => "Event", :foreign_key => :event_id
belongs_to :promoter, :foreign_key => :promoter_id, :class_name => "User"

数据库设置为:

User
id
..etc (irrelevant)

Event
id
user_id
...etc (irrelevant)

EventView
id
user_id
event_id
promoter_id
...etc (irrelevant)

我正打算打电话:

User.all.first.promoted_events

它有效,但它给了我错误的信息!它与EventViews上的promoter_id(我想要的)无关,而是在事件上使用user_id

以下是数据库中发生的事情:

User Load (0.2ms)  SELECT `users`.* FROM `users` ORDER BY `users`.`id` ASC LIMIT 1
Event Load (2.1ms)  SELECT `events`.* FROM `events` INNER JOIN `event_views` ON `events`.`id` = `event_views`.`event_id` INNER JOIN `events` `events_promoted_events_join` ON `event_views`.`event_id` = `events_promoted_events_join`.`id` WHERE `events_promoted_events_join`.`user_id` = 1

很明显。user_id = 1引起了问题,如何将其更改为promoter_id = 1?我已经尝试在用户模型中设置primary_key和foreign_key,但它似乎被忽略了。

另外:我尝试使用finder_sql,但在Rails 4中已弃用

1 个答案:

答案 0 :(得分:0)

User
has_many :events
has_many :promoted_event_views, :foreign_key => 'promoter_id'
has_many :event_views
has_many :promoted_events, :through => :event_views, :source => :promoted_event

EventView
belongs_to :user
belongs_to :promoted_event, :class_name => "Event", :foreign_key => 'event_id'
belongs_to :promoter, :foreign_key => 'promoter_id', :class_name => 'User'