选择字段中的rails_admin params [:query]将被忽略

时间:2018-03-14 19:18:54

标签: ruby-on-rails rails-admin

无法在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

rails_admin_filter_search

我尝试了模型中的每个配置。但没有任何作用。无论我在此下拉输入中输入什么,都会被忽略。

我在puma服务器上有以下日志。

 Started GET "/admin/author?associated_collection=author&compact=true&current_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]) 这是有效的。但这绝对是错误的。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我对rails_adminglobalize宝石有同样的问题。我通过定义模型的自定义搜索来解决此问题。例如

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
}

参考:https://github.com/sferik/rails_admin/wiki/Custom-Search

答案 1 :(得分:0)

Rails管理员将使用为该模型定义的搜索来搜索关联。 这意味着您无法在绘图模型上定义搜索,但您需要在作者模型上执行此操作。

因此,列出作者时有效的任何搜索都可以在该下拉列表中使用。 您需要注意的另一件事是rails管理员将默认使用object.title或object.name来显示该名称。 您可以在作者模型上将它们定义为方法。 如果您需要其他方法,可以配置管理员在config / initializers / rails_admin.rb

上使用的rails
RailsAdmin.config do |config|
  config.label_methods = [:rails_admin_title, :name]
end