在 Rails 中的 find 中使用 lambda

2024-03-20

我有一个方法可以进行分页查找调用,例如..

1

coll = paginate(:all, lambda {{:conditions => ['status = ? AND expires < ?', 'a', DateTime.now]}}, :select => Constants::POST_FIELDS,
                   :order => 'posts.ratings DESC', :include => [{:poster => :poster_friends}, :category], :per_page => Constants::LISTINGS_PER_PAGE,
                   :page => page)

当此调用运行时,它只是忽略生成的查询中的条件。

2

如果我在named_scope中尝试它,我会收到类似的错误。

named_scope :featured_all, lambda {{:conditions => ['status = ? AND expires < ?', 'a', DateTime.now], order => 'posts.ratings DESC', :include => [{:poster => :poster_friends},  :category],
            :select => Constants::POST_FIELDS}}

命名范围错误:

/usr/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/hash/keys.rb:47:in `assert_valid_keys'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2101:in `with_scope'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:113:in `__send__'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:113:in `with_scope'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:174:in `method_missing'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:188:in `load_found'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:166:in `proxy_found'
    /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/named_scope.rb:109:in `is_a?'
    /usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/formatter.rb:78:in `determine_output_class'
    /usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/formatter.rb:48:in `format_output'
    /usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/view.rb:213:in `render_output'
    /usr/lib/ruby/gems/1.8/gems/hirb-0.3.1/lib/hirb/view.rb:126:in `view_output'

对于#1。我做错了什么,为什么忽略条件?

对于 #2 为什么会出现这个错误?另外,如何传递 :page 和 per_page 参数来限制named_scope 中的查询。

Thanks


您的用例不保证命名范围。您可以按如下方式编写常规查找器:

coll = paginate(:select     => Constants::POST_FIELDS,
                :conditions => ['status = ? AND expires < ?', 'a', DateTime.now],
                :include    => [{:poster => :poster_friends}, :category],
                :order      => 'posts.ratings DESC',  
                :per_page   => Constants::LISTINGS_PER_PAGE,
                :page => page)

The paginate方法相当于all,所以你不必提供:all结果集范围限定符paginate method.

时间值是在执行查询时计算的。这与命名范围不同,在命名范围中您必须使用 lambda 来达到相同的效果。

如果您需要使用named_scope,请执行以下操作:

named_scope :featured_all, lambda {{
                :select     => Constants::POST_FIELDS,
                :conditions => ['status = ? AND expires < ?', 'a', DateTime.now],
                :include    => [{:poster => :poster_friends}, :category],
                :order      => 'posts.ratings DESC'
               }}

现在您可以使用named_scope,如下所示

Post.feature_all.paginate(:per_page => Constants::LISTINGS_PER_PAGE, 
                          :page => page)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 中的 find 中使用 lambda 的相关文章

随机推荐

  • 如何在角度材料2中选择默认项目选择多个

    我正在开发 Angular 2 Material 应用程序 我有一个情况 其中存在多选元素 并且我有一个带有复选框的列表 因此我可以一次选择多个项目 我可以使用角度材质组件来实现这一点 但我想要的是默认检查 2 3 个项目 如果我选择 取消
  • Laravel 5 在测试之间重新播种数据库以进行单元测试

    我从一个种子数据库开始 并尝试在 Laravel 5 的单元测试之间重新种子数据库 在 Laravel 4 中 我知道您可以简单地使用 Illuminate Support Facades Artisan 并运行命令 Artisan cal
  • 为什么java.nio.files.Path中没有Path构造函数?

    Path 类没有记录的构造函数 但可以通过以下方式创建实例 Paths get 这是FileSystems getDefault getPath 那么有人可以解释这个设计决策吗 有人可以解释这个设计决定吗 这是因为 JSR 203 允许从多
  • ManageUserViewModel 类在哪里?

    我使用 ASP Net MVC 5 EF 6 和 Net 4 5 1 创建了一个项目 在某些时候 我需要更改项目所在的命名空间 从 MyTestProject 更改为 MyRealProject 在整个网站上进行这些更改后 我现在在一些视图
  • 避免贫血域模型 - 一个真实的例子

    我试图理解贫血领域模型以及为什么它们被认为是反模式 这是一个现实世界的例子 我有一个 Employee 类 它有大量的属性 姓名 性别 用户名等 public class Employee public string Name get se
  • WCF 与 Java 兼容吗?

    哪些 WCF 服务协议与 Java 配合得很好 TCP 服务绑定是否可与 java 远程处理 Corba EJB JMS 等 配合使用 作为服务端点公开的 Web 服务又如何呢 这些是否已经针对通用 Java WebServices 堆栈进
  • 如何为特定目录设置open_basedir

    我有一个目录 htdocs unsecured我想限制该目录或其子目录中的任何内容访问该目录之外的任何内容 在哪里以及如何设置open basedir仅适用于此目录 您可以设置open basedir在您的 Apache 配置文件 php
  • 将 git lfs ls-files 与 git ls-files ':(attr:filter=lfs)' 进行比较是否是检测不受 lfs 管理的 lfs 文件的可靠方法?

    我尝试找到一种方法来确定 git 存储库中的文件是否由 git lfs 正确管理 到目前为止 我发现比较结果git lfs ls files and git ls files attr filter lfs 似乎给了我我想要的 Add Ty
  • Ruby 相当于“grep -C 5”来获取匹配周围行的上下文?

    我对此进行了一些搜索 但我一定使用了错误的术语 ruby 是否有办法 grep 查找字符串 正则表达式并返回周围的 5 行 上面和下面 我知道我可以打电话 grep C 5 或者甚至编写我自己的方法 但这似乎是 ruby 拥有的东西 而我只
  • Mac 上的 auctex 和 emacs

    我想要的是能够成功使用 emacs 和 auctex 一些系统信息 ProductName Mac OS X ProductVersion 10 8 5 BuildVersion 12F45 Emacs Version 24 3 9 0 A
  • 如何在 iPad 版 Objective C 中解析 PDF

    我一直在解析 PDF 文件 请指导我如何做到这一点 头文件 PDFViewer h interface PDFViewer UIView CGPDFDocumentRef pdf void drawInContext CGContextRe
  • 如何通过 XSLT 在 Java 中合并 2 个 XML 流

    我想在 Java 中合并 2 个 XML 流 字符串 必须通过 XSLT 我可以更改转换 但问题是 XML 作为字符串出现 有很多例子 但是通过文件 可以在不将它们保存在文件中的情况下完成此操作吗 Thanks 我只知道一种使用自己的实现的
  • c++ max_element 每n个元素

    有没有办法比较每 N 个元素来找到容器中的最大元素并返回索引 使用 STL BOOST 或 其他库 对于每个 N 我的意思是使用 std max element 但将 for 的增加从 first 更改为 first n based on
  • 该算法的名称是什么?它与其他图像重采样算法相比如何?

    这个算法已经在我脑海中存在了很长一段时间 但我找不到任何地方描述它 虽然它是如此简单 但我不可能是唯一一个想到它的人 它的工作原理如下 你从一张图片开始 比如说 7x7px 您需要将其重新采样 例如 5x5px 所以你要做的就是取每个新方块
  • UITextView 和浮动自动更正窗口的位置

    我有一个启用自动更正的 UITextView 视图的高度约为 30 像素 当自动更正启动时 自动更正视图在文本下方几乎不可见 有没有办法控制小自动更正窗口的位置或确保它是顶层 以便它始终可见并且用户可以轻松查看并与之交互 我发现在 UITe
  • Backbone.js 和 requirejs:如何将模型、视图和集合转换为 requirejs 模块?

    我正在使用backbone js开发一个javascript应用程序 也就是说 为了便于开发 我以这种方式构建我的文件 app views L movieRow js L movieDetail js models L movie js L
  • Java 8 构造函数参考的可怕性能和大堆占用?

    我刚刚在我们的生产环境中经历了一次相当不愉快的经历 导致OutOfMemoryErrors heapspace 我将问题追溯到我的使用ArrayList new在一个函数中 验证这实际上比通过声明的构造函数正常创建执行得更差 t gt ne
  • 等待设备时出错:等待模拟器上线 300 秒后超时

    我一直在尝试使用 android studio 2 0 模拟器 但我无法在模拟器上运行我的应用程序 当我运行我的应用程序时 它会显示模拟器 其中包含以下详细信息 哈克斯已启用 Hax ram size 0x800000000 HAx 正在运
  • 如何设置 UIBarButtonItem 的字体大小?

    我找不到自定义标题字体大小的方法UIBarButtonItem 我能想到解决这个问题的唯一方法是将其设置为图像 我想避免这种情况 还有其他建议吗 Objective C NSUInteger fontSize 20 UIFont font
  • 在 Rails 中的 find 中使用 lambda

    我有一个方法可以进行分页查找调用 例如 1 coll paginate all lambda conditions gt status AND expires lt a DateTime now select gt Constants PO