【问题标题】:Ransack search through scope通过范围搜查
【发布时间】:2016-06-02 09:14:04
【问题描述】:

我有一个模型Task,其作用域名为doneTask 属于 ProjectUser

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

simple_form_for @q do |form|
  form.input :tasks_done_project_id, collection: Project.ordered

但是使用“_done”不起作用。

我想到了一个洗劫者:

  ransacker :done do |parent|
    parent.done.table[:id]
  end

但也不起作用。有什么想法吗?

【问题讨论】:

  • 如果我们有一个接受多个参数的范围该怎么办。如何以形式解决这个问题?如何从表单传递多个参数?

标签: sql ruby-on-rails ruby simple-form ransack


【解决方案1】:

来自the documentation

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

...

# `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

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

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

  def self.ransackable_scopes(auth_object = nil)
    [:done]
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2021-10-12
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    相关资源
    最近更新 更多