如何将 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/