2016-03-19 46 views
0

我在Rails中的模型之間查詢時遇到了一些麻煩。我有一個Messagebelongs_to: booking。我的目標是將active範圍添加到Message,這取決於Booking範圍。Rails中的模型之間的鏈式範圍

class Booking < ActiveRecord::Base 
    has_one :event 
    has_many :messages 

    def self.active 
    includes(:event). 
     where('events.endtime >= ? AND status IS NOT ?' 
      Time.current.beginning_of_week,    
      statuses['canceled']) 
    end 
end 

class Message < ActiveRecord::Base 
    belongs_to :booking 
    belongs_to :person 

    self.active(person_id) 
    where(person_id: person_id).merge(Booking.active) 
    end 
end 

我想找到Message小號針對特定Person在相關Bookingactive。因此,我在創建Message.active時希望使用Booking.active

與上述實施調用Message.active(1)返回以下錯誤:

Association named 'event' was not found on Message; perhaps you misspelled it?

有什麼辦法,我可以在Message.active和實現中使用Booking.active得到Message小號回來了?

回答

1

如果要添加在協會的條件,還需要加入他們,不僅mergeinclude他們,即下面應該工作:

class Booking < ActiveRecord::Base 
    # ... 
    def self.active 
    joins(:event). 
     where('events.endtime >= ? AND status IS NOT ?' 
      Time.current.beginning_of_week,    
      statuses['canceled']) 
    end 
end 

class Message < ActiveRecord::Base 
    # ... 
    self.active(person_id) 
    where(person_id: person_id).joins(:booking).merge(Booking.active) 
    end  
end 

上沒有這麼多的文檔,請參閱this欲瞭解更多信息。