2013-12-11 37 views
0

我想从用户事件EventView.promoter_id = User.id,但它不能正常工作。这里是我的设置(目前不正确的):has_many通过与不同的外键

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,但它似乎被忽略。

ALSO:我尝试使用finder_sql但它在Rails的弃用4

+0

我看到'belongs_to的:promoted_event,...:foreign_key =>:event_id',但我没有看到一个'event_id'列任何地方。你确定这是你的意图吗? –

+0

对不起,只是编辑将它包含在事件视图 – Rob

+0

我不知道它是否与问题有关,但在你的'EventView'中,你为':event'指定了相同的外键(隐式地是'event_id' )和':promoter_event'(显式为'event_id')。 –

回答

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' 
+0

nope,仍然给我相同的结果 – Rob