在我的控制器中,我有一个带有where
方法的即时变量,它是搜索控制器中过滤器的一部分。
@items = @items.where([ 'borrowable = ?', true]) if params[:top_filter] == 'borrow'
borrowable = ?, true
位完全错误。我想要的是使用名为@items
的{{1}}中的方法过滤可借用的Item's model
。
我该怎么做?
borrowable?
中的方法如下。
Item model
答案 0 :(得分:2)
如果它依赖于模型级代码,那么您将无法将其放在where子句中。 where子句试图获取项目列表,但是在每个要调用方法的项目上,但是在获取项目之前没有方法。您可以在数据库上使用存储过程,但只需在Rails代码中就可以执行此操作:
@items = @items.keep_if { |item| item.borrowable? } if params[:top_filter] == 'borrow'
答案 1 :(得分:1)
你不能! ActiveRecord对数据库进行查询,然后使用返回的数据构建对象。因此,在返回数据之前,不存在ruby对象,并且您无法使用它们的方法。
如果您能够使用“计算”(在SQL意义上)表示相同的信息,那么您可以通过
使用它@items.where("some sql condition/calculation")...