2012-01-28 6 views
6

すべての結果ではなく、current_userの結果を表示するために、ActiveAdminコントローラのインデックスアクションをオーバーライドしようとしています。ActiveAdmin:インデックスコントローラアクションを無効にする方法:未定義メソッド `base 'for nil:NilClass

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

ActiveAdmin、スローで例外にアクセス:

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

私はレール3.1と最新ActiveAdminのバージョンを使用しています。 gem "activeadmin", :git => 'https://github.com/gregbell/active_admin.git'

答えて

4

これはもう必要ありません。

ActiveAdmin 0.4.4では、このメソッドをオーバーライドしないでスコープクエリをサポートできるようになりました。 こちらを参照してください。http://activeadmin.info/docs/2-resource-customization.html#scoping_the_queries

をあなたの管理者が異なるアクセスレベルを持っている場合、あなたは時々 彼らはへのアクセス権を持っているものの範囲にすることもできます。あなたのUserモデルが 適切にhas_many関係を持っていると仮定すると、あなたは、単にスコープリスト などのようなファインダーができます。

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

この重要な区別を追加するだけで、これはcurrent_userとの関連があると主張しています。ユーザーモデルに現在のモデルとの関連付けが定義されていない場合、これは機能しません。 scope_toをブロックで使用することもありません。 – wkhatch

8

私はなぜ知らないが

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

はトリックをしました。

+0

これは私にとってあまりにもhttp://stackoverflow.com/questions/13116244 –

+0

あなたがこれに達したのか働いていましたか? –

2

は、このようなアクションオーバーライドしましょう:このところで

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

    # other stuffs 
end 

を、オーバーライドした新しいコレクションで通常は(xml、csvなどに)エクスポート関数を実行できます。

私のテストでは、条件とスコープが制限されていない場合にのみ動作します。

がここから参照してください:https://github.com/activeadmin/activeadmin/issues/642

関連する問題