2012-01-28 19 views
6

Tôi đang cố gắng ghi đè hành động chỉ mục của bộ điều khiển ActiveAdmin để nó hiển thị kết quả cho current_user thay vì tất cả kết quả.ActiveAdmin: Cách ghi đè hành động của bộ điều khiển chỉ mục: phương thức undefined `base 'cho nil: NilClass

controller do 
    def index 
    @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
    end 
end 

Khi truy cập vào ActiveAdmin, một ngoại lệ trong ném:

ActionView::Template::Error (undefined method `base' for nil:NilClass): 
    1: render renderer_for(:index) 

Tôi sử dụng đường ray 3.1 và phiên bản mới nhất ActiveAdmin. gem "activeadmin", :git => 'https://github.com/gregbell/active_admin.git'.

Trả lời

4

Điều này không bắt buộc nữa.

ActiveAdmin 0.4.4 hiện hỗ trợ truy vấn phạm vi mà không ghi đè phương pháp này. xin vui lòng xem tại đây: http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries

Nếu quản trị viên của bạn có mức độ truy cập khác nhau, bạn có thể thỉnh thoảng muốn phạm vi những gì họ có thể truy cập. Giả sử mô hình tài khoản của bạn đã các mối quan hệ has_many thích hợp, bạn có thể chỉ đơn giản là phạm vi danh sách và Finders như vậy:

ActiveAdmin.register Post do 
    scope_to :current_user 

    # or if the association doesn't have the default name. 
    # scope_to :current_user, :association_method => :blog_posts 
end 
+0

chỉ cần thêm sự khác biệt quan trọng này: điều này khẳng định rằng có một liên kết với current_user. Nếu mô hình người dùng không có liên kết được xác định cho mô hình hiện tại, mô hình này sẽ không hoạt động. Không sử dụng scope_to với một khối. – wkhatch

8

Tôi không biết tại sao nhưng

controller do 
    def index 
     index! do |format| 
     @user_tasks = UserTask.where(:user_id => current_user.id).page(params[:page]) 
     format.html 
     end 
    end 
end 

đã làm các trick.

+0

này làm việc cho tôi quá http://stackoverflow.com/questions/13116244 –

+0

làm thế nào bạn đạt đến điều này? –

2

Để cho ghi đè lên các hành động như thế này:

controller do 
    def scoped_collection 
    # some stuffs 
    super.where("type = ?", "good") 
    end 

    # other stuffs 
end 

Bằng cách này, bạn cũng có thể chạy các hàm xuất (thành xml, csv, ...) bình thường với bộ sưu tập mới mà bạn đã ghi đè.

Trong thử nghiệm của tôi, nó chỉ hoạt động đối với điều kiện và phạm vi, không giới hạn.

Tham khảo từ này: https://github.com/activeadmin/activeadmin/issues/642

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