2013-05-14 27 views
22

Obecnie mam model User, który jest zarejestrowany w user.rb jako nowy zasób dla ActiveAdmin. Wygenerowana strona wyświetla wszystkich użytkowników z zakresami (all/journalists/startup_employees). Teraz chcę utworzyć kolejną stronę dla tego samego zasobu i tych samych zakresów, ale powinny być tylko zapisy z polem waiting ustawione na true (poprzednia strona powinna wyświetlać tylko to z :waiting => false). Jak mogłem to zrobić? Wiem, że mogę to zrobić za pomocą filtrów, ale potrzebuję dwóch oddzielnych stron z dwoma linkami w menu.Dwie strony dla tego samego zasobu - ActiveAdmin

// ROZWIĄZANIE

To było nawet łatwiej niż rady (dzięki chłopaki!):

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

która wygląda dobrze! – James

+0

jakie powinny być nazwy plików w tym przypadku – Atul

Odpowiedz

1

można użyć parametru odróżnić przypadki i czynią różne działania w zależności w parametrze:

link_to users_path(:kind => 'waiting') 

aw 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 

następnie umieścić nową, inną stronę (częściowe) w app/views/Users/waiting.html.erb

Jeśli chcesz użyć innego układu dla tego strona dodać parametr układu do renderowania:

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

STI (pojedyncze tabeli dziedziczenia) mogą być wykorzystywane do tworzenia wielu „sub-zasobów” tego samego tabeli/dominującej w modelu Active admin

  1. Dodaj „Typ” kolumna w tabeli użytkownika jako ciąg

  2. dodać do User modelu odzwierciedlać oczekiwania pola z typem pola

    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting")} 
    
  3. Tworzenie nowych modeli UserWaiting i UserNotWaiting

    class UserWaiting < User 
    end 
    class UserNotWaiting < User 
    end 
    
  4. Tworzenie Active Admin zasoby

    ActiveAdmin.register UserWaiting do 
    # .... 
    end 
    ActiveAdmin.register UserNotWaiting do 
    # .... 
    end 
    
  5. można uruchomić synchronizację czasową w pierwszej konsoli

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

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

Innym sposobem może być pominięcie kolumny typu (kroki 1,2 i 5) i rozwiązanie pozostałych za pomocą zakresów.

  1. Krok 3 i 4 powyżej

  2. następnie utworzyć zakresów

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

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

Wystarczy upewnić się inne zakresy na tych dwóch stronach są również filtrowane po oczekiwaniu/niewysłaniu na