我正在尝试从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中已弃用
答案 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'