12

我希望能够根据其父对象的属性过滤对象:

class Call < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :calls
end

我希望能够做到这一点:

ActiveAdmin.register Call do
  filter :user
end

并让它过滤 user.name,而不是显示所有用户的选择。这可以做到吗?

4

5 回答 5

34

丹尼斯的解决方案几乎对我有用。我只需要添加过滤器类型。例如:

ActiveAdmin.register Call do
  filter :user_name, :as => :string
end
于 2012-01-11T22:59:21.440 回答
10

尝试这个:

ActiveAdmin.register Call do
  filter :user_name
end

由于 ActiveAdminmeta_search用于过滤器,因此他们的文档非常有用:https ://github.com/ernie/meta_search

于 2011-11-11T09:41:26.787 回答
4

在 ActiveAdmin 的下一个版本(我使用 1.0.0.pre)中,您可以使用Ransack方法。所以,假设你有一篇文章,它属于用户。

您将拥有以下 admin/article.rb 文件

ActiveAdmin.register Article do

  controller do
    def scoped_collection
      Article.includes(:user)
    end
  end  

  index do      
   column :id
   column :created_at
   column :title
   column("Author", sortable: 'users.first_name') { |item| link_to item.user.full_name, user_path(item.user) }
   actions
  end

  filter :user_first_name_cont, :as => :string
  filter :user_last_name_cont, :as => :string  

end

在这里,user_first_name_cont 是过滤关联用户 first_name 的 ransack 方法,“cont”表示包含。

于 2014-05-25T07:54:25.477 回答
3

您可以使用 ActiveAdmin 使用的 InheritedResource 中的嵌套资源,因此您的列表会自动被父级过滤。

ActiveAdmin.register User do
  # this is the parent resource
end

ActiveAdmin.register Call do
  belongs_to :user # nested below resource user
end

然后,您可以使用 rake 路由查看由 ActiveAdmin 生成的新嵌套路由 :) 希望对您有所帮助

于 2011-12-01T20:41:59.473 回答
0

我想说这在很大程度上取决于你的模型之间的关联类型——我花了几个小时才弄清楚这一点。

例子

class User < ActiveRecord::Base
  belongs_to :user
end

class Email < ActiveRecord::Base
  has_one :email
end

要根据他们的电子邮件过滤用户,请执行此操作(不要忘记该as: :string部分,因为它使您可以访问 Ransack 搜索方法,例如包含等)

ActiveAdmin.register User do
  filter :user_email, :as => :string
end
于 2018-08-28T23:45:35.190 回答