2014-11-20 7 views
10

के साथ ActiveAdmin मैं slug के साथ अपने रेल 4 अनुप्रयोग में friendly_id का उपयोग कर रहा हूं। अब मैं active_admin gem का उपयोग कर रहा हूं।दोस्ताना आईडी

समस्या:

जब मैं Group संसाधन के लिए सक्रिय व्यवस्थापक से शो लिंक पर क्लिक करें, यह निम्न अपवाद फेंक है:

ActiveRecord::RecordNotFound at /admin/groups/username20-s-group-1 

मुझे लगता है, मैं active_admin में से कुछ को ओवरराइड करने की जरूरत है डिफ़ॉल्ट कार्य?

उत्तर

19

ऐसे मामले हैं, जब एप्लिकेशन ने कुछ संसाधनों को छोड़ दिया है, इसलिए इसे DRY रखने के लिए एक अच्छा समाधान है जो पूरे एप्लिकेशन के लिए कोड की कुछ पंक्तियों की आवश्यकता होती है - बस सक्रियडमिन के संसाधन नियंत्रक को ओवरराइड करें।

ActiveAdmin::ResourceController.class_eval do 
    def find_resource 
    finder = resource_class.is_a?(FriendlyId) ? :slug : :id 
    scoped_collection.find_by(finder => params[:id]) 
    end 
end 

मत भूलना सर्वर को पुनः आरंभ करने के लिए:

निम्नलिखित सामग्री के साथ config/intializers/active_admin_monkey_patching.rb फ़ाइल बनाएँ।

config/initialisers/active_admin.rb में:

ActiveAdmin.setup do |config| 
    # == Friendly Id addon 
    ActiveAdmin::ResourceController.class_eval do 
    def find_resource 
     resource_class.is_a?(FriendlyId) ? scoped_collection.friendly.find(params[:id]) : scoped_collection.find(params[:id]) 
    end 
    end 

    # initial config 
end 

+0

मुझे लगता है कि इसे 'config/intializers/active_admin.rb' में जोड़ा जाना है। जब मैंने इसे वहां जोड़ा तो मेरे लिए काम किया। 'Friendly_id - 5.1' – nik

+1

इससे कोई फ़र्क नहीं पड़ता कि यह किस प्रारंभकर्ता को जोड़ा जाता है। – rantingsonrails

5

समस्या के लिए मिले समाधान:

अपने app/admin/[ResourceName.rb] ऐड में:

# app/admin/group.rb 

    # find record with slug(friendly_id) 
    controller do 
    def find_resource 
     begin 
     scoped_collection.where(slug: params[:id]).first! 
     rescue ActiveRecord::RecordNotFound 
     scoped_collection.find(params[:id]) 
     end 
    end 
    end 

यह मेरी समस्या हल।

9

@ AndreyDeineko के लिए एक बेहतर दृष्टिकोण config/initialisers/active_admin.rb में ActiveAdmin::ResourceController के find_resource विधि ओवरराइड और FriendlyId (इस बिंदु पर 5.x) द्वारा प्रदान की विधियों का लाभ उठाने के लिए है यह एप्लिकेशन नियंत्रक में डालने की तुलना में मेरे लिए बहुत साफ दिखता है, क्योंकि यह सक्रिय व्यवस्थापक की कॉन्फ़िगरेशन से संबंधित है।

0
class User < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :username, :use => [:slugged, :finders] 
संबंधित मुद्दे