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.