通过范围进行彻底搜索

Ale*_*. b 1 ruby sql ruby-on-rails simple-form ransack

我有一个模型Task,其范围名为done. ATask属于 aProject且属于 a User

我需要按用户已完成的项目来过滤用户task

simple_form_for @q do |form|
  form.input :tasks_done_project_id, collection: Project.ordered
Run Code Online (Sandbox Code Playgroud)

但使用“_done”不起作用。

我想到了一个掠夺者:

  ransacker :done do |parent|
    parent.done.table[:id]
  end
Run Code Online (Sandbox Code Playgroud)

但也不起作用。任何想法?

Tom*_*ord 6

文档中:

默认情况下,在模型的任何列上都授权搜索和排序,并且没有类方法/范围被列入白名单。

...

# `ransackable_scopes` by default returns an empty array
# i.e. no class methods/scopes are authorized.
# For overriding with a whitelist array of *symbols*.
#
def ransackable_scopes(auth_object = nil)
  []
end
Run Code Online (Sandbox Code Playgroud)

在您的Task模型中,您必须明确将done范围列入白名单:

class Task < ActiveRecord::Base
  scope :done, -> { ... }

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