Supplier.joins(:products).find(params[:id]).where('suppliers.permalink = ? AND variants.master = ?', params[:id], TRUE)
params[: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
テーブルを照会していることに注意してください、これは正しくありません。?)
何?あなたはデータベースから何を得ようとしていますか? params [:id]は実際にはパーマリンクですか? – lcguida