Ransack:如何使用现有范围?

2023-12-29

将 Rails 2 应用程序转换为 Rails 3,我必须更换 gem搜索逻辑 https://github.com/binarylogic/searchlogic。现在,使用 Rails 3.2.8 和 gemRansack https://github.com/ernie/ransack我想构建一个使用现有范围的搜索表单。例子:

class Post < ActiveRecord::Base
  scope :year, lambda { |year| 
    where("posts.date BETWEEN '#{year}-01-01' AND '#{year}-12-31'") 
  }
end  

据我所知,这可以通过定义自定义来实现掠夺者 http://rdoc.info/github/ernie/ransack/Ransack/Ransacker。遗憾的是,我没有找到任何有关此的文档。我在Postclass:

ransacker :year, 
          :formatter => proc {|v| 
            year(v)
          }

但这不起作用:

Post.ransack(:year_eq => 2012).result.to_sql
=> TypeError: Cannot visit ActiveRecord::Relation

我尝试了一些变体ransacker声明,但它们都不起作用。我需要一些帮助...

UPDATE:上述范围只是示例。我正在寻找一种方法来使用 Ransack 中的每个现有范围。 Ransack的前身MetaSearch中,有一个功能叫做search_methods用于使用范围。兰萨克有不支持这个 https://github.com/ernie/ransack/issues/61开箱即用。


ransack 合并后开箱即用地支持它https://github.com/activerecord-hackery/ransack/pull/390 https://github.com/activerecord-hackery/ransack/pull/390。你应该声明ransackable_scopes方法添加可见范围以进行搜查。

来自手册

继续上一节,按范围搜索需要定义一个白名单ransackable_scopes在模型类上。白名单应该是符号数组。默认情况下,所有类方法(例如作用域)都会被忽略。范围将应用于匹配真实值,或者如果范围接受一个值,则应用于给定值:

class Employee < ActiveRecord::Base
  scope :activated, ->(boolean = true) { where(active: boolean) }
  scope :salary_gt, ->(amount) { where('salary > ?', amount) }

  # Scopes are just syntactical sugar for class methods, which may also be used:

  def self.hired_since(date)
    where('start_date >= ?', date)
  end

  private

  def self.ransackable_scopes(auth_object = nil)
    if auth_object.try(:admin?)
      # allow admin users access to all three methods
      %i(activated hired_since salary_gt)
    else
      # allow other users to search on `activated` and `hired_since` only
      %i(activated hired_since)
    end
  end
end

Employee.ransack({ activated: true, hired_since: '2013-01-01' })

Employee.ransack({ salary_gt: 100_000 }, { auth_object: current_user })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ransack:如何使用现有范围? 的相关文章

  • 如何更改 twitter-bootstrap 中文本区域的列数?

    如果我更改 rows 的值 它就会起作用 但无论我用 cols gt 设置什么值 它都会保持默认的 cols 列宽不会改变 我查看了 html 源代码 它反映了更改 我想知道 bootstrap 的 CSS 可能是嫌疑人 HTML 最终的
  • 如何阻止与 RSpec 和 Capybara 的外部连接?

    在我的 Rails 项目中 我想编写非理想条件的测试 例如缺乏互联网连接或超时 例如 我正在使用 gem 来联系 API 并且希望确保在我的应用程序和外部 API 之间存在连接问题时能够正确处理错误 我已经可以通过用录像机制作固定装置并从
  • 我们能否知道回形针下载何时完成?

    我有一个应用程序 我需要知道用户的 Rails Paperclip 文件下载时间complete 我的应用程序设置为与 Amazon S3 交互 当用户收到完整的文件时 我需要运行 JavaScript 函数 我怎样才能做到这一点 跟踪天气
  • Ruby on Rails - 设计注册链接不起作用 - 未定义方法“user_registration_path”

    这个问题之前已经报告过 但我仍然无法找到解决方案 我已将插件 Devise 安装到我的新 RoR 项目中 当我点击注册链接时 我被重定向到以下路线 http localhost 3000 users registration sign up
  • Rails 4 i18n,如何转换子域用于区域设置的路由

    我正在使用子域来确定 Rails 4 网站中的区域设置 我完全按照我想要的方式使用区域设置切换器 但现在我需要翻译路线 并且我不确定继续的最佳方法 我看过https github com kwi i18n routing https git
  • Mongoid 中的 find_or_create_by 线程安全吗?

    我有一个使用 Mongoid 的 find or create by 方法的网络应用程序 poll Poll find or create by fields 在投入生产之前 我尝试运行故障场景 我发现多个用户可以尝试使用此方法访问此资源
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • 从 url 导入 CSV Errno::ENAMETOOLONG: 文件名太长

    我正在尝试从 url 导入 CSV 文件 但我得到了Errno ENAMETOOLONG file name too long 我按如下方式处理该文件 require open uri url http de65 grepolis com
  • 如何在 Rails 控制器中调用通道方法?

    我有一个订阅用户的 ActionCable 方法 如果启动新的 convo 我也希望用户订阅新频道 我无法找出在控制器中调用通道方法的正确语法 更新 问题是消息在发送时附加到聊天框 但是当发送第一条消息时 Websocket 连接尚未建立
  • 多态控制器和调用对象

    我的地址具有多态关系 可以由成员或依赖者拥有 一切看起来都很棒 直到我意识到除非我遗漏了一些东西 否则我不知道创建它的对象是什么类型 有没有办法告诉路由文件包含对象的类型 Models class Member lt ActiveRecor
  • Rails 注释分段错误

    有一些问题围绕着这个问题 但没有什么真正能满足我的需求 After I bundle install下面列出了我的 Gemfile 我运行annotate并出现以下错误 Users nickcoelius rvm gems ruby 1 8
  • 在 Rails 的文本字段中显示链接

    在我的 Rails 3 1 应用程序中 我有一个用于评论的文本字段 我希望能够允许人们包含可点击的链接 而不仅仅是显示为纯文本的 url 以及让文本字段识别用户何时文本字段中的换行符 用户无需添加 html 我怎样才能做到这一点 如果用户将
  • Rails:CSRF 令牌不工作但已设置

    我在 Heroku 上有我的 Rails 3 应用程序 当我发送银行信息时 我得到 WARNING Can t verify CSRF token authenticity但我的 CSRF 令牌已设置 https gist github c
  • 创建一个简单的 Rails 3 文本助手 Gem [重复]

    这个问题在这里已经有答案了 我一直在开发我的第一个 Rails 3 插件 以打包一个我喜欢在ApplicationHelper我所有的应用程序 你可以看到整个代码在 Github 上 https github com burlesona s
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • 如何从 Rails 中的 date_select 或 select_date 获取日期?

    Using select date给我回一个params my date with year month and day属性 如何轻松获取 Date 对象 我希望有类似的事情params my date to date 我很高兴使用date
  • 如何从引擎覆盖 Rails 应用程序路由?

    我有一个 Rails 应用程序 我正在尝试将 Rails 引擎集成到其中 主机应用程序有一些捕获所有路由 magic urls match gt admin rendering show match path edit gt admin r
  • 如何使用 Rspec 测试具有嵌套路由的控制器?

    我有 2 个使用轨道脚手架生成器创建的控制器 我希望它们嵌套在一个名为 demo 的文件夹中 所以运行 rails g scaffold demo flows rails g scaffold demo nodes 然后我决定将节点嵌套在流
  • (Rails) Assert_Select 的烦人警告

    有谁知道如何让assert select在rake测试期间不输出所有那些讨厌的html警告 你知道 就像这样的东西 ignoring attempt to close body with div opened at byte 1036 li
  • 为什么 RackMultipart* 文件保留在我的 Rails /tmp 目录中?

    我正在使用 Paperclip 2 3 来处理在 Ubuntu 上运行的 Rails 3 0 3 应用程序上的图像上传 Paperclip 正在按广告处理上传 但在应用程序的 tmp 文件夹中创建的 RackMultipart 文件仍然存在

随机推荐

  • 尚未为数据源“请求”提供数据源实例

    我的报告查看器出现错误 我不知道如何纠正这个错误 我收到的错误是 尚未为数据源 请求 提供数据源实例 我尝试过搜索此内容 但找不到任何我认为错误的内容 有人可以指出我正确的方向吗 这就是我的reportvierer 的样子
  • Pharo Smalltalk 中 = 和 == 有什么区别?

    有什么区别 and 在 Pharo Smalltalk 中 他们叫什么名字 一个isEqual和另一个 equality inequality deep equality inequality shallow 需要考虑的一件重要的事情是 不
  • 如何使用 R 和 ggplot2 使 comment_custom() grob 与 scale_y_reverse() 一起显示?

    我是新来的ggplot2对 R 来说相对较新 我可以使图片出现在绘图上 并且可以使 y 轴反向缩放 但我不知道如何同时执行这两个操作 例如 library ggplot2 y c 1 2 3 x c 0 0 0 d data frame x
  • Tomcat 8 示例:缺少配置步骤

    我正在尝试在 Tomcat 8 上设置 Echo websocket 示例 我相信我错过了告诉 tomcat 有关 websocket 类的步骤 这是我所做的 在 Eclipse 中创建了一个新的动态 Web 项目 添加了 maven 并链
  • 按升序对对象数组进行排序,但将所有零放在末尾

    如果我有一个对象数组 val 0 val 1 val 0 val 3 如何按升序对其进行排序 但将零保留在末尾 如下所示 val 1 val 3 val 0 val 0 正如预期的那样 排序将零放在顶部 即使我添加逻辑来对末尾的零进行排序
  • 使用可重用模式进行 D3 语义缩放

    我正在尝试在使用 Mike Bostock 的同时实现语义缩放迈向可重用图表 https bost ocks org mike chart 模式 其中图表表示为函数 在我的缩放处理程序中 我想使用转换 rescaleX 更新我的比例 然后只
  • Oracle 日期“Between”查询

    我使用的是oracle数据库 我想执行一个查询来检查两个日期之间的数据 NAME START DATE Small Widget 15 JAN 10 04 25 32 000000 PM Product 1 17 JAN 10 04 31
  • 这个语法是什么 isNaN(+str!)

    找到了here https github com vuetifyjs vuetify blob 4d03847cce58569c285da7cc4328ea0b0ebd45d1 packages vuetify src util helpe
  • 在 gscatter 中获得更合理颜色的简单方法

    我正在寻找一种简单的方法来获得gscatter选择更合理的颜色 如下图所示 第 3 组和第 4 组的颜色非常相似 很难区分 我正在使用绘制我的数据gscatter X 1 X 4 assigns 我知道我可以使用scatter通过创建一个与
  • 为什么发电机不能酸洗?

    Python 的 pickle 我这里说的是标准 Python 2 5 2 6 2 7 不能 pickle 锁 文件对象等 它也不能 pickle 生成器和 lambda 表达式 或任何其他匿名代码 因为 pickle 实际上只存储名称引用
  • 需要处理具有非唯一多索引的串联数据帧

    这有效 import pandas as pd raw data type 1 1 1 id 1 2 3 name 1 Alex Amy df a pd DataFrame raw data columns type 1 id 1 name
  • 如何在 Keras 中将嵌入与可变长度输入连接起来?

    这是我正在研究的网络图 数据是表格和结构化的 左边 我们有一些能力这是连续的特征 在右边 我们可以有 N 个修饰符 每个修改器都有修饰符类型这是绝对的和一些统计数据这是连续的特征 如果只有一个修饰符这是运行良好的代码 import kera
  • 在静态 HTML 页面中进行 JQuery 搜索,并突出显示找到的单词

    我一直在尝试使用 JQuery 在静态 HTML 页面中进行简单的搜索 我不得不提的是 这只是我第一次使用 JQuery 我正在尝试更改页面中找到的单词的背景 这是我迄今为止尝试过的 myJavascript js document rea
  • 是否有任何主要的 C++ 实现实际上将“NULL”定义为“nullptr”?

    从 C 11 开始 标准允许宏NULL要么是一个值为零的整数文字 要么是类型的纯右值std nullptr t 任何决定更改其定义的标准库供应商NULL从一个整数到nullptr很可能会导致依赖 C 11 之前代码的客户端崩溃 是否有任何主
  • Tensorflow 张量重塑并用零填充

    有没有办法重塑张量并用零填充任何溢出 我知道 ndarray reshape 会这样做 但据我了解 将 Tensor 转换为 ndarray 需要在 GPU 和 CPU 之间进行翻转 Tensorflow 的 reshape 文档说 Ten
  • Clock_gettime() 仍然不是单调的 - 替代方案?

    正如众所周知的那样 参见 例如 这个老问题 https stackoverflow com questions 3657289 linux clock gettimeclock monotonic strange non monotonic
  • jQuery 可拖动输入元素

    我正在尝试使用 jQuery UI 使表单元素可拖动 例如 按钮 复选框 文本字段等 到目前为止我还没有运气 您有什么想法如何实现这一目标吗 也许晚了 3 年 但您可以调度事件并使用以下代码片段来实现更预期的行为 演示 jsFiddle h
  • 关于“Greasemonkey 入门”教程的建议 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Java中根据第一个迭代变量对嵌套循环元素进行分组

    我有 2 个列表 第一个用于句子 第一个用于关键字 这个想法是检查句子是否有关键字 并将它们按顺序放入每个句子的列表中 如果这已经提前复制在这里 我很抱歉 List
  • Ransack:如何使用现有范围?

    将 Rails 2 应用程序转换为 Rails 3 我必须更换 gem搜索逻辑 https github com binarylogic searchlogic 现在 使用 Rails 3 2 8 和 gemRansack https gi