在Rails中如何使用模型的方法来激活记录`where`?

时间:2015-09-18 07:37:44

标签: ruby-on-rails ruby-on-rails-4 activerecord

通常我们使用Model.where(name: 'John')来查找记录。让我们说我在名为status的模型中有一个方法,它进行一些计算并输出一个字符串。我怎样才能在where中使用它?现在,如果我使用Model.where(status: 'active'),则会显示PG::UndefinedColumn: ERROR: column model.status does not exist

2 个答案:

答案 0 :(得分:1)

不,你不能。 where用于SQL条件,如果您在Ruby中计算status,则无法在where中使用它。

答案 1 :(得分:1)

如果你问的是如何在检索记录之前将status作为过滤器应用于SQL服务器,则不能。

  • 确实有一个选择是检索所有记录,然后使用select来获得你想要的东西。这是非常低效的。

  • 另一个选择是编写SQL逻辑片段并将其直接插入到where。这不容易但效率很高。

  • 最后一个解决方案是让before_save的状态为您的计算机并存储在表中。然后,您可以使用常规位置过滤所需的记录。这样做的缺点是你有一个新的额外专栏。