有没有办法在where
中使用过滤条件,这不是数据库列。如果我有一个使用以下方法的Movie
模型:
def blockbuster?
imdb_rating > 8
end
有没有办法做像Movie.where(:blockbuster? => true)
这样的事情.我知道在这个特定的例子中,可以只使用 imdb_rating
属性 ( Movie.where('imdb_rating > ?', 8)
),但在某些情况下,当一个方法执行更复杂的逻辑时。目前,如果我想这样做,我必须调用Movie.all.select(&:blockbuster?)
,但我想在数据库级别执行此操作。谢谢。
附言我确信类似的问题被问了很多次,但我似乎想不出正确的关键字来在这里或在谷歌上找到它们。如果在其他地方回答了这个问题,请发布一个链接。
你试过把它做成一个范围吗?Rails 文档中有一些关于作用域的信息。
基本上,使用您的方法,您将执行以下操作:
class Movie < ActiveRecord::Base
scope :blockbuster, -> { where('imdb_rating > ?', 8) }
end
Movie.blockbuster # returns all relevant objects as an ActiveRecord relation
类方法也可用作作用域:
class Movie < ActiveRecord::Base
def self.blockbuster?
where('imdb_rating ?', 8)
end
end
Movie.blockbuster? # also returns all relevant objects as an ActiveRecord relation