2013-05-14 6 views
22

Derzeit habe ich User Modell, das in user.rb als neue Ressource für ActiveAdmin registriert ist. Die generierte Seite zeigt alle Benutzer mit Bereichen an (all/journalists/startup_employees). Jetzt möchte ich eine andere Seite für die gleiche Ressource und die gleichen Bereiche erstellen, aber es sollten nur Datensätze mit waiting Feld auf true gesetzt sein (und die vorherige Seite sollte nur diese mit :waiting => false anzeigen). Wie könnte ich das tun? Ich weiß, dass ich das mit Filtern machen könnte, aber ich brauche zwei separate Seiten mit zwei Links im Menü.Zwei Seiten für die gleiche Ressource - ActiveAdmin

// SOLUTION

Es war sogar noch einfacher als Ratschläge (Danke Jungs!):

ActiveAdmin.register User, :as => 'Waitlist User' do 
    menu :label => "Waitlist" 

    controller do 
    def scoped_collection 
     User.where(:waitlist => true) 
    end 
    end 

    # code 

    scope :all 
    scope :journalists 
    scope :startup_employees 
end 

ActiveAdmin.register User do 
    controller do 
    def scoped_collection 
     User.where(:waitlist => false) 
    end 
    end 

    # code 

    scope :all 
    scope :journalists 
    scope :startup_employees 
end 
+1

das sieht gut aus! – James

+0

was sollten die Dateinamen in diesem Fall sein – Atul

Antwort

1

Sie einen Parameter verwenden, könnten die Fälle und machen verschiedene Aktionen zu unterscheiden, je auf dem Parameter:

link_to users_path(:kind => 'waiting') 

und in der users_controller.rb

def index 
    if params[:kind]=='waiting' 
    @users= Users.where(:waiting => true) 
    render :action => 'waiting' and return 
    else 
    # do your other stuff 
    end 
end 

dann legen Sie Ihre neue, andere Seite (teilweise) in app/views/users/waiting.html.erb

Wenn Sie ein anderes Layout für diese verwenden möchten Seite das Layout Parameter hinzufügen zu machen:

render :action => 'waiting', :layout => 'other_layout' and return 
5

STI (Vererbung Einzeltisch) können verwendet werden, um mehrere „Unterressourcen“ des gleichen Tabelle/Eltern Modell zu schaffen, in Active admin

  1. hinzufügen "Typ" -Spalte in Benutzertabelle als String

  2. dieses Modell zu User hinzufügen mit Typ-Feld Wartefeld

    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting")} 
    
  3. die neuen Modelle erstellen spiegeln UserWaiting und UserNotWaiting

    class UserWaiting < User 
    end 
    class UserNotWaiting < User 
    end 
    
  4. erstellen Active Admin Ressourcen

    ActiveAdmin.register UserWaiting do 
    # .... 
    end 
    ActiveAdmin.register UserNotWaiting do 
    # .... 
    end 
    
  5. Sie können einen erstmaligen sync in der Konsole laufen

    User.all.each {|user| user.save} 
    

..............

Eine andere Möglichkeit besteht darin, die Spalte Typ (Schritte 1,2 und 5) zu überspringen und den Rest mit Bereichen zu lösen.

  1. Schritt 3 und 4 oben

  2. Erstellen Sie dann die Bereiche

    #model/user.rb 
    scope :waiting, where(:waiting => true) 
    scope :not_waiting, where(:waiting => false) 
    
  3. Scopes in Active Admin

    #admin/user.rb 
    scope :waiting, :default => true 
    
    #admin/user_not_waitings.rb 
    scope :not_waiting, :default => true 
    

einfach die anderen Bereiche stellen Sie sicher, In diesen beiden Seiten sind auch gefiltert auf warten/not_waiting