我想在一个页面上为一个模型创建一个activeadmin过滤器,该模型与User模型有关联.我想使用自定义作用域matches_name,它结合了first_namelast_name字段.我已经将该作用域添加到模型的ransackable_scopes方法中,并且我可以在Rails控制台中查询它.

我指定了这样的过滤器:

filter :user_matches_name, as: :string, label: "User"

然而,当我加载页面时,它错误地显示以下消息:

undefined method `user_matches_name_contains' for Ransack::Search<class: MyModel, base: Grouping <combinator: and>>:Ransack::Search

我已经能够创建一个过滤器在用户activeadmin页面没有类似的错误:

filter :matches_name, as: :string, label: "User"

有没有一种方法可以防止ransack或activeadmin在过滤器的末尾附加额外的_contains

推荐答案

您可以使用ransacker来组合User类的first_name和last_name(例如full_name),然后从与User模型有关联的ActiveAdmin资源文件中使用以下过滤器: filter :user_full_name, as: :string, label: 'User'

注册我的模型资源

ActiveAdmin.register MyModel do
  actions :index

  filter :user_full_name, as: :string, label: 'User'
end

注册用户资源

ActiveAdmin.register User do
  actions :index
end

用户和MyModel模型

class MyModel < ApplicationRecord
  belongs_to :user

  def self.ransackable_associations(auth_object = nil)
    %w[user]
  end

  def self.ransackable_attributes(auth_object = nil)
    %w[created_at id id_value updated_at user_id]
  end
end

class User < ApplicationRecord
  ransacker :full_name do |parent|
    Arel::Nodes::InfixOperation.new('||', parent.table[:first_name], parent.table[:last_name])
  end

  def self.ransackable_attributes(auth_object = nil)
    %w[created_at first_name full_name id id_value last_name updated_at]
  end
end

这段代码应能在ActiveAdmin gem的3.x.x和2.x.x版本中正常工作

Ruby-on-rails相关问答推荐

`heroku Open`和`heroku run rake db:Migrate`不工作(";没有这样的文件或目录";)

Django模型在关系更新时更新相关对象

Sidekiq with Rails - 控制台与 rake 任务中的不同 Sidekiq 实例

Ruby/Rails 相当于 Python 的 sys.addAuditHook

我如何在不在 gemfile 中的 rake 任务中要求 gem?

BigDecimals 的总和最终成为整数 [Ruby on Rails]

当我必须更改 rspec 中的方法时,如何检测时间?

无法加载此类文件 -- mysql2/mysql2

如何避免 has_many :through 关系中的重复?

rails 4.0, rake db:sessions:create

从 Rails 模型内部访问翻译文件 (i18n)

如何在 Rails 应用程序中使用长 id?

Rails 引擎中的迁移?

Rails 中是否有 HTML 安全截断方法?

Rails 3.1 Sprockets 需要指令 - 有没有办法排除特定文件?

以最Ruby 风格计算 ActiveSupport:TimeWithZone 天数的差异?

Rails - 邮件,将正文作为纯文本获取

Rails:如何在rails中使用dependent::destroy?

测试和规格有什么区别?

ruby on rails 如何处理 NaN