【问题标题】:How to have a non query based scope in Rails如何在 Rails 中建立非基于查询的范围
【发布时间】:2012-03-06 23:40:32
【问题描述】:

如何将 ActiveRecord 对象数组上的过滤器转换为 作用域

例如转这个:

Users.all.collect { |u| u.has_super_powers? }

进入:

scope :supers, #something here

关键是它可以用作范围,因此 Users.all 并不总是“all”,例如:

Users.undeleted.supers.find_by_this('that')

我认为也许在作用域中使用 lambda 表达式是一种方法,但我认为这行不通,因为我无权访问记录,因为表达式已添加到数据库查询中,而不是作为后步运行结果。

【问题讨论】:

  • 什么是has_super_powers? 作用域仅适用于数据库内的数据,而不适用于 Ruby 方法。

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

这取决于您是否可以将u.has_super_powers? 转换为数据库查询。有时可能,有时不可能。

例如:如果您在 users 表中有一个数据库字段 has_super_powers (boolean column),您可以在该字段上创建一个范围:

范围:has_super_powers,其中(:has_super_powers => true)

现在您可以将它与其他范围链接在一起:

User.undeleted.has_super_powers.find_by_this('that')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2010-12-16
    相关资源
    最近更新 更多