2012-06-21 7 views
12

मैं एक ActiveAdmin ऐप विकसित कर रहा हूं, और मैं अपने "प्रकार" द्वारा व्यवसायों के कॉलम को सॉर्ट करना चाहता हूं। दुर्भाग्य से मेरा कोड काम नहीं कर रहा है। इसे पूरा करने के लिए मुझे किस कोड का उपयोग करना चाहिए? यहाँ मेरी कोड ...ActiveAdmin एसोसिएशन के साथ कॉलम को सॉर्ट करने के लिए कैसे करें

app/models/business.rb


class Business < ActiveRecord::Base 
    belongs_to :type 

    attr_accessible :description, :email, :facebook, :foursquare, :google, :manager, 
    :mobile, :name, :phone, :type_id, :url, :yelp 
end 

app/models/type.rb


class Type < ActiveRecord::Base 
    attr_accessible :category 
    has_many :businesses 

    def to_s 
    category 
    end 
end 

app/admin/businesses.rb


0 है
ActiveAdmin.register Business, { :sort_order => :name_asc } do 
    scope :joined, :default => true do |businesses| 
    businesses.includes [:type] 
    end 
    index do 
    column :name 
    column :type, :sortable => 'businesses.type' 
    column :manager 
    column :email 
    default_actions 
    end 
end 

धन्यवाद!

+0

कोई भी? मुझे अभी भी इस रोडब्लॉक का सामना करना पड़ रहा है ... – Slicekick

उत्तर

8

FIXED

column :type, :sortable => 'types.category'

+2

अपने प्रश्न में आप एक ही लाइन डालते हैं ... – dusan

+1

मुझे यह नहीं मिला? यह उपरोक्त जैसा ही है? – cjm2671

18

इस चर्चा के अनुसार: https://github.com/gregbell/active_admin/pull/623, आप कार्यक्षेत्र का उपयोग नहीं करना चाहते, तो आप उपयोग कर सकते हैं बजाय scoped संग्रह विधि:

ActiveAdmin.register Business, { :sort_order => :name_asc } do 
    scope :all, :default => true 

    index do 
    column :name 
    column :type, :sortable => 'types.category' 
    column :manager 
    column :email 
    default_actions 
    end 

    controller do 
    def scoped_collection 
     end_of_association_chain.includes(:type) 
    end 
    end 
end 
+0

.. और यह मेरे लिए बिल्कुल सही काम करता है :) –

+0

तो आपको इसे वोट देना चाहिए! :) – Rimian

+0

ActiveRecord के हाल के संस्करणों में शामिल होने के लिए आपको '.references (: type)' के बाद '(टाइप करें)' को चेन करना पड़ सकता है। – ahmacleod

4

हाँ , scoped_collection Evgenia प्रदान किया गया महान काम करता है। इसके अलावा एक से अधिक कॉलम के लिए:

ActiveAdmin.register Foo do 
    index do 
    column :field_name_a, :sortable => 'association_a.field_name' 
    column :field_name_b, :sortable => 'association_b.field_name' 
    end 
end 

controller do 
    def scoped_collection 
    end_of_association_chain.includes([:association_a, :association_b]) 
    end 
end 
3

यह किया जा सकता है।

यहां मेरे पास स्टार नामक एक मॉडल है। एक सितारा एक व्यक्ति से संबंधित है। मैं स्टार एडमिन इंडेक्स में Person.name डालने जा रहा हूं, इसे क्रमबद्ध बनाएं, इसे स्कॉप्स के साथ काम करें, और फ़िल्टर जोड़ें।

सबसे पहले आपको अपने प्रत्येक स्कोप में शामिल मॉडल जोड़ना होगा। इस मामले में मेरे पास 3 स्कॉप्स थे: सभी, श्रेणी-सदस्यता और व्यक्ति-सदस्यताएं। मैं स्कोप की घोषणा कर रहा हूँ और उन्हें शामिल होने के मॉडल जोड़कर:

ActiveAdmin.register Star do 
    [ :all, :category_subscriptions, :person_subscriptions ].each do |sym| 
    scope(sym, :default => (sym == :all)) do |stars| 
     stars.includes [:person] 
    end 
    end 
end 

अब मेरी स्टार सूचकांक में शामिल होने के मॉडल से व्यक्ति नाम जोड़ने के लिए मैं इस कार्य करें:

index do 
    id_column 
    column("Name", nil, :sortable => :"people.name") {|star| star.person.name} 
    column("Email", nil, :sortable => :"people.email") {|star| star.person.email} 
    default_actions 
end 

की कि काटना करते हैं:

column("Name", nil, :sortable => :"people.name") {|star| star.person.name} 
  • पहले पैरामीटर स्तंभ शीर्षक है।
  • दूसरी आवश्यकता नहीं है क्योंकि हम क्रम और मूल्य ओवरराइड कर रहे हैं।
  • : क्रमबद्ध सक्रिय व्यवस्थापक को बताता है कि चीज़ को कैसे सॉर्ट करें। यह तालिका का नाम है, क्योंकि यह एसक्यूएल में जा रहा है।
  • ब्लॉक सक्रिय व्यवस्थापक को पंक्ति मान के रूप में उपयोग करने के लिए कहता है।

अब कुछ फ़िल्टर जोड़ने के लिए।यह बहुत आसान है:

filter :person_name, :as => :string 
filter :person_email, :as => :string 

और आप कर चुके हैं।

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