在ActiveAdmin过滤器中使用ActiveRecord范围

Mat*_*ski 3 ruby activerecord ruby-on-rails activeadmin

在我的rails项目中我有模型:

class Panel < ActiveRecord::Base
  has_many :surveys

  scope :by_survey_name, ->(survey_name) {
    joins(:surveys).where('surveys.survey_name LIKE (?)', "%#{survey_name}%")
  }
end
Run Code Online (Sandbox Code Playgroud)

问题是如何在activeadmin fiter中使用此范围?

Mat*_*ski 9

添加到型号:

  def self.ransackable_scopes(_auth_object = nil)
    [:by_survey_name]
  end
Run Code Online (Sandbox Code Playgroud)

然后在资源中:

  filter :by_survey_name, as: :string
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这似乎不再起作用(缺少 Ransack::Search 的方法“by_survey_name_contains”)。这真的是创建带有范围的过滤器的正确方法吗?某处有相关文档吗? (2认同)