2012-09-16 5 views
8

मैं एक ऐसा प्रश्न करना चाहता हूं जो केवल उन संपत्तियों को लौटाता है जिनके पास सीरियल नंबर नहीं है जहां वर्कॉर्डर शाखा एक संख्या के बराबर होती है।रेल 3: सभी बाल रिकॉर्ड्स पुनर्प्राप्त करें जहां पैरेंट मॉडल विशेषता खोज कुंजी के बराबर होती है

class Workorder < ActiveRecord::Base 
    belongs_to :user 
    has_many :assets 

    scope :current_branch, where("branch=350").order("wo_date ASC") 
end 

class Asset < ActiveRecord::Base 
    belongs_to :workorder 

    scope :needs_serial, :conditions => {:serial => ""} 
end 

class AssetsController < ApplicationController 
    def index 
     @assets_needing_serial=??? 
    end 
end 

तो मुझे एक हैश की इच्छा है: संपत्तियां जहां संपत्ति.workorder.branch = "350"। मुझे लगता है कि मैं एक लूप कर सकता हूं और इस तरह हैश बना सकता हूं लेकिन क्या मुझे इसे एक प्रश्न में करने में सक्षम होना चाहिए? क्या मुझे इसके लिए स्कोप का उपयोग करने की कोशिश करनी चाहिए?

** अद्यतन

यह है कि मैं क्या का उपयोग कर समाप्त हो गया है। महान काम किया।

@assets = Asset.joins(:workorder).where('workorders.branch=350').order('workorders.wo_date ASC') 

उत्तर

17

क्वेरी आप क्या करना चाहते हैं

Asset.joins(:workorder).where('workorders.branch = 325') 

तो तुम इस तरह एक गुंजाइश बना सकते हैं:

scope :with_workorder_branch, lambda { |branch| joins(:workorder).where('workorders.branch = ?', branch) } 

आप workorders के माध्यम से पाशन जा करने के लिए जा रहे हैं, आपको शामिल होने के लिए जोड़ों को बदलना चाहिए क्योंकि यह उत्सुक उन्हें लोड करता है।

प्रश्नों का रेल गाइड

बात की इस तरह http://guides.rubyonrails.org/active_record_querying.html

+0

धन्यवाद के लिए बहुत उपयोगी है! काम करने के लिए सही –

+0

खुशी हुई। आपको बाईं ओर टिक पर क्लिक करके जवाब स्वीकार करना चाहिए ... – Edward

संबंधित मुद्दे