简体   繁体   中英

has_many through with different foreign key

I'm trying to get Events from the User where EventView.promoter_id = User.id but it's not working properly. Here is my setup (currently incorrect):

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"

The database is set up as:

User
id
..etc (irrelevant)

Event
id
user_id
...etc (irrelevant)

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

I'm trying to call:

User.all.first.promoted_events

It works, but it gives me the wrong information! It's not relating to the promoter_id on EventViews (what I want), but instead it's using user_id on Events

Here's what's happening in the database:

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

It's pretty clear that the . user_id = 1 is causing the problem, how can I change this to promoter_id = 1? I've already tried setting primary_key and foreign_key on in the user model but it seems to be getting ignored.

ALSO: I tried using finder_sql but it's deprecated in Rails 4

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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM