无法在rails admin中搜索如何过滤嵌套关联所属的内容。
我在模型中的rails_admin配置中有以下代码。
class Painting < ApplicationRecord
...
rails_admin do
configure :translations, :globalize_tabs
create do
field :author do
searchable [:last_name]
queryable [:last_name]
filterable true
end
field :genre
field :technique
field :material
field :active
field :painting_images
field :author_preview
field :translations
end
end
我尝试了模型中的每个配置。但没有任何作用。无论我在此下拉输入中输入什么,都会被忽略。
我在puma服务器上有以下日志。
Started GET "/admin/author?associated_collection=author&compact=true¤t_action=create&source_abstract_model=painting&query=George" for 127.0.0.1 at 2018-03-14 22:07:11 +0300
Processing by RailsAdmin::MainController#index as JSON
Parameters: {"associated_collection"=>"author", "compact"=>"true", "current_action"=>"create", "source_abstract_model"=>"painting", "query"=>"George", "model_name"=>"author"}
Admin Load (0.3ms) SELECT "admins".* FROM "admins" WHERE "admins"."id" = $1 ORDER BY "admins"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
Painting Load (0.3ms) SELECT "paintings".* FROM "paintings" WHERE "paintings"."id" IS NULL ORDER BY "paintings"."id" DESC LIMIT $1 [["LIMIT", 1]]
(0.3ms) SELECT COUNT(*) FROM "authors"
Author Load (0.4ms) SELECT "authors".* FROM "authors" ORDER BY authors.id desc LIMIT $1 [["LIMIT", 30]]
Author::Translation Load (0.6ms) SELECT "author_translations".* FROM "author_translations" WHERE "author_translations"."author_id" IN (114, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85)
Completed 200 OK in 61ms (Views: 1.4ms | ActiveRecord: 1.9ms)
事情就是我在输入中输入的所有内容都在参数中处理,但永远不会被评估。所以它只是被忽略了,它没有按params[:query]
我使用globalize
gem进行翻译,并且不知道如何正确配置rails admin以使用它过滤。
我在原始回购中搜索过。 我觉得不合时宜this
def get_collection(model_config, scope, pagination)
...
options = options.merge(query: params[:query]) if params[:query].present?
...
model_config.abstract_model.all(options, scope)
end
此查询在此处可用,但在那里被忽略。
我试着用
model_config.abstract_model.all(options, scope).where(last_name: params[:query])
这是有效的。但这绝对是错误的。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我对rails_admin
和globalize
宝石有同样的问题。我通过定义模型的自定义搜索来解决此问题。例如
config.model 'Author' do
list do
search_by :search_by_name
field :id
field :name
end
end
在Author
模型中,定义search_by_name
的范围,它将解决在“作者列表”页面中的搜索和在其他页面中的下拉菜单。
scope :search_by_name, -> (term) {
if term.present?
with_translations.where('author_translations.name like ?', FormatString.new(term, :sql_match).to_s)
else
where({})
end
}
答案 1 :(得分:0)
Rails管理员将使用为该模型定义的搜索来搜索关联。 这意味着您无法在绘图模型上定义搜索,但您需要在作者模型上执行此操作。
因此,列出作者时有效的任何搜索都可以在该下拉列表中使用。 您需要注意的另一件事是rails管理员将默认使用object.title或object.name来显示该名称。 您可以在作者模型上将它们定义为方法。 如果您需要其他方法,可以配置管理员在config / initializers / rails_admin.rb
上使用的railsRailsAdmin.config do |config|
config.label_methods = [:rails_admin_title, :name]
end