方法为true的即时变量

时间:2012-11-08 16:05:35

标签: ruby-on-rails where

在我的控制器中,我有一个带有where方法的即时变量,它是搜索控制器中过滤器的一部分。

@items = @items.where([ 'borrowable = ?', true]) if params[:top_filter] == 'borrow'

borrowable = ?, true位完全错误。我想要的是使用名为@items的{​​{1}}中的方法过滤可借用Item's model

我该怎么做?

borrowable?中的方法如下。

Item model

2 个答案:

答案 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")...