[英]Filter on parent object attribute in ActiveAdmin
我希望能够根据对象父级的属性过滤对象:
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,而不是呈现所有用户的选择。 可以这样做吗?
丹尼斯的解决方案几乎对我有用。 我只需要添加过滤器类型。 例如:
ActiveAdmin.register Call do
filter :user_name, :as => :string
end
尝试这个:
ActiveAdmin.register Call do
filter :user_name
end
由于ActiveAdmin使用meta_search
过滤器,因此他们的doc非常有用: https : //github.com/ernie/meta_search
您可以使用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生成的新嵌套路由:)希望它有所帮助
在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是ransack方法,它过滤关联的用户first_name,'cont'表示包含。
我会说这在很大程度上取决于你的模型之间的关联类型 - 我需要花费数小时来解决这个问题。
例
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.