在我的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
现在没关系,因为用户只有一个小组,但这在不久的将来不适合。
答案 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)
代替?