2010-12-28 16 views
9

मैं तालिका में स्तंभों को क्रमबद्ध करने के लिए मेटा_सार्च का उपयोग कर रहा हूं। मेरे टेबल कॉलम में से एक एक विशेष मॉडल के लिए संबंधित रिकॉर्ड की गिनती है।रेल मेटा_सेर्च मणि: संबंधित मॉडल की गणना द्वारा क्रमबद्ध करें

मूल रूप से यह बताया गया है:

class Shop < ActiveRecord::Base 
    has_many :inventory_records 

    def current_inventory_count 
    inventory_records.where(:current => true).count 
    end 
end 

class InventoryRecord < ActiveRecord::Base 
    belongs_to :shop 

    #has a "current" boolean on this which I want to filter by as well 
end 

मेरी दुकान # सूचकांक ध्यान में रखते हुए मैं एक मेज है कि प्रत्येक दुकान के लिए current_inventory_count बाहर सूचीबद्ध करता है। क्या इस गिनती से दुकानों को आदेश देने के लिए मेटा_सार्च का उपयोग करने के लिए वैसे भी है?

मैं अपनी current_inventory_count विधि का उपयोग नहीं कर सकता क्योंकि मेटा_सार्च केवल कस्टम विधियों का उपयोग कर सकता है जो ActiveRecord :: रिलेशनशिप प्रकार लौटाते हैं।

ऐसा करने का एकमात्र तरीका यह है कि मैं कुछ कस्टम एसक्यूएल करना चाहता हूं जिसमें "वर्चुअल" कॉलम में गिनती शामिल है और इस कॉलम द्वारा सॉर्टिंग करें। मुझे यकीन नहीं है कि यह भी संभव है।

कोई विचार?

मैं रेल 3.0.3 और नवीनतम मेटा_सार्च का उपयोग कर रहा हूं।

+0

मेरे सबसे अच्छे शर्त सिर्फ दुकानें है कि मैं सिर्फ यह सुनिश्चित करने के लिए एक "current_inventory_records_count" db स्तंभ जोड़ने के लिए किया जाएगा हमेशा before_save का उपयोग सही है ? – jfeust

उत्तर

8

एक परिणाम सेट करने के लिए अतिरिक्त स्तंभ जोड़ने के लिए ...

Shop.rb में ..

scope :add_count_col, joins(:inventory_records).where(:current=>true).select("shops.*, count(DISTINCT inventory_records.id) as numirecs").group('shops.id') 

scope :sort_by_numirecs_asc, order("numirecs ASC") 
scope :sort_by_numirecs_desc, order("numirecs DESC") 

shops_controller.rb सूचकांक विधि में

@search = Shop.add_count_col.search(params[:search]) 
#etc. 

index.html.erb

<%= sort_link @search, :numirecs, "Inventory Records" %> 

मिले यहाँ sort_by__asc संदर्भ में: http://metautonomo.us/2010/11/21/metasearch-metawhere-and-rails-3-0-3/

+0

बिल्कुल सही, धन्यवाद! – jfeust

4

रेल इस बुलाया counter_cache

एक तालिका स्तंभ अपने दुकानों की मेज पर "inventory_records_count" नाम बनाएँ के लिए निर्मित एक समाधान है।

class Shop < ActiveRecord::Base 
    has_many :inventory_records, :counter_cache => true 
end 

http://asciicasts.com/episodes/23-counter-cache-column

+0

धन्यवाद, यह जानना अच्छा है, लेकिन मैं केवल "इन्वेंट्री" के रूप में चिह्नित इन्वेंट्री रिकॉर्ड गिनना चाहता हूं। – jfeust

+0

has_many: inventory_records,: conditions => {: current => true}, counter_cache => true – Unixmonkey

+0

यह एचएबीटीएम एसोसिएशन के साथ काम नहीं करेगा, दुर्भाग्य से – CharlieMezak

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