2012-12-15 9 views
5

Mam następujące modeleJak pisać zakres z obiektem belongs_to?

modele

Job 
    belongs_to :company 
Company 
    has_many :jobs 

Teraz wybiorę wszystkie Jobs które akceptowaną Company stosując następujące metody:

def self.with_accepted_company 
    Job.all.reject {|job| job.company.state != "accepted" } 
end 

Ale chciałbym użyj tego zakresu i użyj go z innymi zakresami. Czy jest możliwe zapisanie tego zakresu w modelu Job?

Odpowiedz

14

chciałbym zrobić coś takiego (od http://guides.rubyonrails.org/active_record_querying.html)

class Job 
    scope :accepted_with_active_company, ->() { 
    joins(:company).where('companies.state' => "accepted") 
    } 
end 
+0

pojawia się błąd przy użyciu tego zakresu '' '>> Job.accepted_with_active_company.inspect ActiveRecord :: ConfigurationError: Stowarzyszenie o nazwie 'firmy' nie znaleziono; może błędnie to napisałeś? from /Users/rege/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/join_dependency.rb:112:in 'build ' ' '' – tomekfranek

+0

Komunikat o błędzie informuje, że nie masz powiązania o nazwie: firmy. Oryginalny kod zakłada, że ​​jest to relacja 'has_many', ale w obliczu jest' belongs_to', co powinieneś zrobić, to mieć join (: company) zamiast join (: companies). Zmieniłem odpowiedź, aby to odzwierciedlić – shadysayed