1

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

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

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

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

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

我无法弄清楚为什么这不适用于“项​​目”模型。任何想法 ?

编辑

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

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

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

4

2 回答 2

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 

在你的控制器中

于 2013-04-16T13:27:20.037 回答
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)

反而?

于 2013-04-15T07:38:51.110 回答