Rails

2016-03-19 14 views
0

modelleri arasındaki zincir kapsamları Rails modellerinde sorgulamada sorun yaşıyorum. belongs_to: booking numaralı Message sınıfım var. Hedefim, Booking kapsamına bağlı olarak Message'a bir active kapsamı eklemektir.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 

Ben ilişkili Bookingactive olan spesifik Person yönelik Message s bulmak istiyoruz. Bu nedenle Message.active'u oluştururken Booking.active'u kullanmak istiyorum.

yukarıdaki uygulamasıyla Message.active(1) çağırma aşağıdaki hatayı döndürür:

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

Message ler geri verilmesinde ben Message.active ve uygulanmasında Booking.active kullanabilirsiniz herhangi bir yolu var mı? Eğer dernekler üzerinde koşulları ekliyorsanız

cevap

1

, ayrıca sadece merge veya include onları aşağıdaki yani çalışmalıdır onlara katılmak gerekir:

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 

Bunun üzerinde çok belge yoktur, bkz Daha fazla bilgi için this.