2012-12-15 10 views
5

Ich habe folgende ModelleWie schreibe ich den Bereich mit "objects_to" -Objekt?

Modelle

Job 
    belongs_to :company 
Company 
    has_many :jobs 

Gerade jetzt alles, was ich wählen die Jobs, die eine akzeptierte haben Company der folgenden Methode:

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

Aber ich möchte Verwenden Sie dafür einen Bereich und verwenden Sie ihn mit anderen Bereichen. Ist es möglich, diesen Bereich im Job Modell zu schreiben?

Antwort

14

würde ich so etwas tun (von http://guides.rubyonrails.org/active_record_querying.html)

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

Ich erhalte eine Fehlermeldung mit diesem Anwendungsbereich '' '>> Job.accepted_with_active_company.inspect Active :: Configuration: Verband namens 'Unternehmen' wurde nicht gefunden; vielleicht hast du es falsch geschrieben? von /Users/rege/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/join_dependency.rb:112:in 'build ' ' '' – tomekfranek

+0

Die Fehlermeldung besagt, dass Sie keine Verknüpfung mit dem Namen "companies" haben. Der ursprüngliche Code geht davon aus, dass es sich um eine 'has_many'-Beziehung handelt, aber im Hinblick darauf ist' gehört_zu', was Sie tun sollten, ist Joins (: Firma) anstelle von Joins (: Firmen). Ich habe die Antwort bearbeitet, um das zu reflektieren – shadysayed