我有以下多态关联:
class Invite < ActiveRecord::Base
belongs_to :inviteable, :polymorphic => true
class Event < ActiveRecord::Base
has_many :invites, :as => :inviteable, :dependent => :destroy
class Team < ActiveRecord::Base
has_many :invites, :as => :inviteable, :dependent => :destroy
我正在尝试在特定于事件和未来事件的邀请上创建范围:
(in Invite.rb)
scope :to_events, where('inviteable_type = ?', "Event")
scope :to_future_events, lambda { self.to_events.joins("join events").where('events.starttime > ?', Time.now) }
to_events范围正常; to_future_events返回正确的邀请子集,但它返回每个邀请的许多副本。知道为什么吗?是否有更清洁/ Rails-ier方式来完成我想要完成的任务?
答案 0 :(得分:4)
您必须为联接提供ON语句:
scope :to_future_events, lambda { self.to_events.joins("join events on events.id = invites.inviteable_id").where('events.starttime > ?', Time.now) }
否则它会将每个邀请记录与每个事件记录连接起来。