我想知道如何使用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>
答案 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])