2013-05-14 30 views
22

Hiện tại tôi có User mô hình, được đăng ký trong user.rb làm tài nguyên mới cho ActiveAdmin. Trang được tạo hiển thị tất cả người dùng có phạm vi (all/journalists/startup_employees). Bây giờ tôi muốn tạo một trang khác cho cùng một tài nguyên và các phạm vi tương tự, nhưng sẽ chỉ có các bản ghi có trường waiting được đặt thành true (và trang trước đó sẽ chỉ hiển thị trang này với :waiting => false). Làm thế nào tôi có thể làm điều đó? Tôi biết tôi có thể làm điều đó với các bộ lọc, nhưng tôi cần hai trang riêng biệt, với hai liên kết trong menu.Hai trang cho cùng một tài nguyên - ActiveAdmin

// SOLUTION

Nó thậm chí còn dễ dàng hơn lời khuyên (nhờ chàng trai!):

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

có vẻ tốt! – James

+0

tên tệp phải là gì trong trường hợp này – Atul

Trả lời

1

bạn có thể sử dụng một tham số để phân biệt các trường hợp và đưa ra các hành động khác nhau tùy thuộc trên tham số:

link_to users_path(:kind => 'waiting') 

và trong 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 

sau đó đặt mới, trang khác của bạn (một phần) trong app/views/users/waiting.html.erb

Nếu bạn muốn sử dụng một cách bố trí khác nhau cho việc này trang thêm tham số bố trí để render:

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

STI (Độc bảng thừa kế) có thể được sử dụng để tạo ra nhiều "sub-tài nguyên" của cùng một bảng/mẹ mô hình trong Active admin

  1. Thêm một "loại" cột trong bảng sử dụng như là một chuỗi

  2. Thêm phần này vào User mô hình để phản ánh lĩnh vực chờ đợi với kiểu trường

    after_commit {|i| update_attribute(:type, waiting ? "UserWaiting" : "UserNotWaiting")} 
    
  3. Tạo các mô hình mới UserWaitingUserNotWaiting

    class UserWaiting < User 
    end 
    class UserNotWaiting < User 
    end 
    
  4. Tạo Active Admin nguồn

    ActiveAdmin.register UserWaiting do 
    # .... 
    end 
    ActiveAdmin.register UserNotWaiting do 
    # .... 
    end 
    
  5. Bạn có thể chạy đồng bộ lần đầu trong giao diện điều khiển

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

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

Một cách khác có thể là bỏ qua cột loại (bước 1,2 và 5) và giải quyết phần còn lại bằng phạm vi.

  1. Bước 3 và 4 ở trên

  2. Sau đó tạo phạm vi

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

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

Chỉ cần chắc chắn rằng các phạm vi khác trong hai trang này cũng được lọc khi chờ/không_waiting

Các vấn đề liên quan