在activeAdmin中过滤索引

时间:2013-04-15 07:17:04

标签: ruby-on-rails activeadmin

在我的activeadmin应用程序中,我需要过滤将出现在索引视图中的记录。

对于我的“Group”模型,集合方法效果很好,但对于“Item”模型,它不起作用并返回以下错误:

undefined method `page' for #<Array:0xc240bc4>

我在admin / items.rb中使用此代码:=&gt;不起作用

collection_action :index, :method => :get do
  # Only get the items belonging to a group owned by the current user
  scope = Group.where("owner_id = ?", current_user.id).map{|group| group.items}

  @collection = scope.page() if params[:q].blank?
  @search = scope.metasearch(clean_search_params(params[:q]))

  respond_to do |format|
  format.html {
    render "active_admin/resource/index"
  }
  end
end

在admin / groups.rb中,以下工作正常(仅显示正确的组)

collection_action :index, :method => :get do
  # Only get the groups owned by the current user
  scope = Group.where("owner_id = ?", current_user.id).scoped

  @collection = scope.page() if params[:q].blank?
  @search = scope.metasearch(clean_search_params(params[:q]))

  respond_to do |format|
    format.html {
      render "active_admin/resource/index"
    }
  end
end

我无法弄清楚为什么这不适用于“Item”模型。有什么想法吗?

修改

我找到了一种解决方法,只获取属于current_user的第一组的项目:

scope = Group.where("owner_id = ?", current_user.id).first.items.scoped

现在没关系,因为用户只有一个小组,但这在不久的将来不适合。

2 个答案:

答案 0 :(得分:1)

尝试有很多:通过 http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

某种

class Group < ActiveRecord::Base
  has_many :items
  belongs_to :user
end

class Item < ActiveRecord::Base
  belongs_to :group
end

class User < ActiveRecord::Base
  has_many :groups
  has_many :items, :through => :groups
end

这将允许你做下一个范围

 current_user.items 
控制器中的

答案 1 :(得分:0)

admin/items.rb

scope = Group.where("owner_id = ?", current_user.id).map{|group| group.items}

admin/groups.rb

scope = Group.where("owner_id = ?", current_user.id).scoped

.scoped方法使您的数组成为一个activerecord对象,可以使用其他方法,如分页,排序等。

如果你想获得包含current_user项目的组,也许你可以使用,

Group.joins(:items).where("owner_id = ?", current_user.id)

代替?