Supplier.joins(:products).find(params[:id]).where('suppliers.permalink = ? AND variants.master = ?', params[:id], TRUE)
你在做什麼這裏是ID爲找到的第一個記錄包含在params[:id]
中,然後嘗試在該單個記錄上運行where
聲明。 where
僅在與模型本身運行時才起作用。
這裏令人困惑的部分是,您正在使用params[:id]
這兩個主鍵(find搜索ID字段),但然後還將它與where子句中的permalink
列進行比較。
爲了解釋這兩種方法的用法:
find
將搜索從表中的結果(S),匹配你把它提供給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