使用.where与.find

时间:2016-04-15 10:57:50

标签: sql ruby-on-rails postgresql activerecord

我想知道如何使用where cause with the ActiveRecord查找方法。

以下是我正在使用的代码:

Supplier.joins(:products).find(params[:id]).where('suppliers.permalink = ? AND variants.master = ?', params[:id], TRUE)

给了我:

undefined method `where' for #<Supplier:0x007fe49b4eb330>

2 个答案:

答案 0 :(得分:1)

Supplier.joins(:products).find(params[:id]).where('suppliers.permalink = ? AND variants.master = ?', params[:id], TRUE)

你在这里做的是找到params[:id]中包含id的第一条记录,然后尝试在该单条记录上运行where语句。 where仅在针对模型本身运行时有效。

这里令人困惑的部分是您使用params[:id]作为主键(find搜索id字段),然后将其与where子句中的permalink列进行比较。

解释两种方法的用法:

find将从表中搜索结果,将您提供的参数与id字段相匹配。您可以传入多个id,此方法主要用于通过id选择您知道存在的行。最常见的是它与单个id一起使用并返回单个实例。

where用于查找与该子句匹配的表中的所有结果,并返回记录集合。然后,您可以优化这些结果或选择一个结果,例如使用.first

Supplier.joins(:products).where('suppliers.permalink = ? AND variants.master = ?', params[:permalink], true).first

(请注意,您正在使用joins(:products),但随后查询variants表。这是不正确的?)

答案 1 :(得分:-1)

Supplier.joins(:products).where('suppliers.permalink = ? AND variants.master = ?', params[:id], TRUE).find(params[:id])