ruby-on-rails - 如何在 Rails 中拥有基于非查询的范围

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

如何将 ActiveRecord 对象数组上的过滤器转换为范围

例如转动这个:

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

进入:

scope :supers, #something here

重点是它可以用作范围,因此 Users.all 并不总是“全部”,例如:

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

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

最佳答案

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

例如:如果用户表中有一个数据库字段has_super_powers( bool 列),您可以在其上创建一个范围:

scope :has_super_powers, where(:has_super_powers => true)

现在您可以将其与其他作用域链接在一起:

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

关于ruby-on-rails - 如何在 Rails 中拥有基于非查询的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593670/

相关文章:

ruby-on-rails - 使用 grouped_options_for_select 设置默认值,使用 f.select

ruby - Ruby/Rails 中的每个持久计数器

ruby-on-rails - Ruby on Rails 应用程序的分离

ruby-on-rails - 为什么 Rails 会对使用哪个 Ruby 感到困惑?

ruby-on-rails - 如何防止 Ruby money 出现浮点错误

ruby-on-rails - ActiveRecord destroy_all 抛出 StatementInvalid

php - 如何在 GridView 上显示过滤模型关系

ruby-on-rails - 如何让 View 不导入 Rails 中的默认应用程序布局?

jQuery Ajax 获取 JSON

ruby-on-rails - 范围从纯字符串语法更改为哈希语法