首页 > 解决方案 > 如何从 Rails Admin 的搜索过滤器中排除字段?

问题描述

当我使用“test”搜索用户时,它给了我一个 Postgres 错误,因为category它是一个整数。

在 2020-02-21 17:43:44 -0500 开始 GET "/admin/user?model_name=user&utf8=%E2%9C%93&query=test" for ::1
由 RailsAdmin::MainController#index 作为 HTML
参数处理: {"model_name"=>"user", "utf8"=>"√", "query"=>"test"}
ActiveRecord::StatementInvalid - PG::InvalidTextRepresentation: 错误: 整数输入语法无效: "test"
LINE 1: ...users.name ILIKE '%test%') OR (users.category IN ('test')) O...

我没有category作为模型的配置字段。

class User < ApplicationRecord
  include RailsAdminUser

module RailsAdminUser
  extend ActiveSupport::Concern
  included do
    rails_admin do
      list do
        fields :id, :email, :name, :company, :sign_in_count, :current_sign_in_at, :current_sign_in_ip
      end

我找不到如何category从它想要搜索的字段中排除。我可以将该字段排除在搜索之外。它似乎用每个字段构建一个查询。我试图隐藏该category字段,但没有奏效。

  list do
    configure :category do
      hide
    end

字段文档:https ://github.com/sferik/rails_admin/wiki/Fields

完整文档:https ://github.com/sferik/rails_admin/wiki

rails_admin 1.4.2


我试过了

  list do
    field :category do
      visible false
      filterable false
    end

但它没有用。

标签: ruby-on-railsrails-admin

解决方案


以前的开发人员有

config\initializers\rails_admin_reload.rb
Rails.application.config.to_prepare do
  RailsAdmin::ApplicationController.class_eval do
    before_action :reload_rails_admin, if: Rails.env.development? # Reloading RailsAdmin Config Automatically

    def reload_rails_admin
      RailsAdmin::Config.reset
    
      load("#{Rails.root}/config/initializers/rails_admin.rb")

我添加了

class User < ApplicationRecord
  rails_admin do
    xxx
  end

module RailsAdminUser
  extend ActiveSupport::Concern
  included do
    rails_admin do
      xxx

它甚至没有抛出错误,所以它甚至没有读取那些文件或方法。我假设他们想在 Rails Admin 配置更改时重新加载它,但它似乎也丢弃了任何和所有模型配置!我评论了它before_action并且它起作用了。

我还添加了

  list do
    field :category do
      visible false
      searchable false
    end

Rails Admin 似乎缓存了模型的配置,因此无论何时更改配置(如searchable true => false),都必须重新启动服务器。很烦人。


推荐阅读