5

में एचएबीटीएम/बहुआयामी सरणी लागू करें मेरे आवेदन में सब कुछ ठीक काम करता है, लेकिन मेरे सक्रिय व्यवस्थापक बैकएंड में मुझे स्क्रीन पर मेरी उपयोगकर्ता भूमिकाएं प्रदर्शित नहीं होती हैं।ActiveAdmin - डीएसएल

class Role < ActiveRecord::Base 
    has_and_belongs_to_many :users, :join_table => :roles_users 
end 

class User < ActiveRecord::Base 
    has_and_belongs_to_many :roles, :join_table => :roles_users 
end 

मैं इसे रेल कंसोल में काम करने के लिए मिलता है:

मैं दो मॉडल "उपयोगकर्ता" और "भूमिकाओं" है

ruby-1.9.2-p290 :006 > user.roles 
=> [#<Role id: 3, name: "Student">, #<Role id: 2, name: "Supervisor">] 
ruby-1.9.2-p290 :007 > user.roles[0].name 
=> "Student" 
ruby-1.9.2-p290 :008 > user.roles[1].name 
=> "Supervisor" 

और मैं में सक्रिय इस लागू करने के कई तरीके की कोशिश की एडमिन डीएसएल (इसमें से एक):

ActiveAdmin.register User do 
    index do 
    column :email 
    column "Role" do |user| 
     user.roles.each do |p| 
     p.name 
     end 
    end 
    end 
end 

क्या कोई मेरी मदद कर सकता है? मैं सक्रिय व्यवस्थापक के डीएसएल में काम करने के लिए कैसे प्राप्त करूं?

उत्तर

13

मैं इस अपने आप को परीक्षण किया है नहीं, लेकिन मैं आपको "कॉलम" में ब्लॉक से एक तार वापस जाने के लिए की जरूरत है विश्वास करते हैं, तो कुछ की तरह

column "Role" do |user| 
    user.roles.map({ |p| p.name }).join(' ') 
end 

काम हो सकता है।

+1

यह काम कर रहा है! धन्यवाद!!!!! बहुत बहुत धन्यवाद!!! :) ओएमजी, मैं इसे विश्वास नहीं कर सकता। यह काम कर रहा है :) – user930328

+1

इसने मेरे लिए एक त्रुटि फेंक दी, लेकिन मानचित्र कॉल के आस-पास '()' को हटाने से समस्या ठीक हो गई। – jordancooperman

3

व्यवस्थापक से संघों हेरफेर करने के लिए सक्षम होने के लिए, आप के लिए एक इनपुट जोड़ने की आवश्यकता होगी सूचकांक ब्लॉक में कोड के अलावा फॉर्म ब्लॉक। आप शो ब्लॉक के अंदर शो स्क्रीन में उपयोगकर्ता भूमिका भी जोड़ सकते हैं।

ActiveAdmin.register User do 
    index do 
    column :email 
    column "Role" do |user| 
     (user.roles.map{ |p| p.name }).join(' ') 
    end 
    end 

    form do |f| 
    f.inputs do 
     f.input :email 
     f.input :roles # add roles input here 
    end 
    f.buttons 
    end 

    show do 
    div :class => 'panel' do 
     h3 'User Details' 
     div :class => 'panel_contents' do 
     div :class => 'attributes_table user' do 
      table do 
      tr do 
       th { 'Email' } 
       td { user.email } 
      end 
      tr do 
       th { 'Roles' } 
       td { (user.roles.map { |p| p.name }).join(' ') } 
      end 
      end # table 
     end # attributes_table 
     end # panel_contents 
    end # panel 
    end # show 
end 
+0

अगर आप इसे सिर्फ एक सप्ताह पहले पोस्ट करते थे: डी अब तक मैंने इसे पहले ही समझ लिया है। लेकिन इसे पोस्ट करने के लिए धन्यवाद। आइए आगे संदर्भ के लिए इसे छोड़ दें। यह किसी और की मदद कर सकता है :) – user930328

+0

@ user930328: मुझे अपने पहले रेल प्रोजेक्ट के लिए ActiveAdmin को कस्टमाइज़ करना था और इस सवाल ने मुझे सही दिशा में इंगित किया। मुझे भी खुद को बाकी को समझना पड़ा और इसे किसी और के लिए पोस्ट करना पड़ा जो इसे उपयोगी पा सकता है, क्योंकि यह ActiveAdmin दस्तावेज़ों में नहीं है। – dkobozev

+0

जबकि हम इसमें हैं, फ़िल्टर पर एक ही प्रश्न: मैं साइडबार में भूमिकाओं के लिए फ़िल्टर करना चाहता हूं। लेकिन चूंकि "भूमिकाएं" डेटाबेस में विशेषता के रूप में शारीरिक रूप से मौजूद नहीं हैं, इसलिए एए इसे प्रदर्शित भी नहीं करता है।मैंने पहले ही इसे अपने उपयोगकर्ता मॉडल में एक विधि के रूप में परिभाषित करने की कोशिश की है। एए को इसके बारे में परवाह नहीं है। यह फ़िल्टर नहीं दिखाता है :(कोई विचार? – user930328

1

आप सूची में आइटमों को भी जोड़ सकते हैं। (बेशक, यह केवल समझ में आता है कि क्या मॉडल आप इस मामले -इन लिस्टिंग रहे हैं, "भूमिकाओं" - यह भी एक ActiveAdmin संसाधन है)

उदाहरण:

column "Role" do |user| 
    user.roles.map { |p| link_to p.name admin_role_path}.join(' ,').html_safe 
end 

सुनिश्चित नहीं हैं कि इस पर लागू होता है, तो आपके मामला, लेकिन मुझे यह उपयोगी पाया।

+0

यह मेरे लिए काम नहीं करता है लेकिन एक विकल्प मिला: 'auto_link' फ़ंक्शन। Http://www.rubydoc.info/github/gregbell/active_admin/ActiveAdmin/ViewHelpers/ AutoLinkHelper –

0

यह मेरे लिए काम करता है: जैसा कि ऊपर टिप्पणियों में से एक में उल्लेख किया

column :role do |user| 
    user.role.map{ |role| role.name }.join(' ') 
end 
0

auto_link के साथ उन्हें लिंक करने के लिए:

column "Role" do |user| 
    user.roles.map { |p| auto_link(p) }.join(', ').html_safe 
end