私は2つのモデルを持っています
class Category < ActiveRecord::Base
belongs_to :parent, :class_name => "Category"
has_many :children, :class_name => "Category", :foreign_key => "parent_id"
has_many :products
attr_accessible :description, :title, :parent
end
class Product < ActiveRecord::Base
belongs_to :category
end
特に、Categoryには「tea」という親アイテムがあり、このアイテムには「black tea」、「whitetea」などの多くの子アイテムがあります。
親カテゴリ「お茶」に属する商品を選択する必要があります。これが私がそれをしている方法です:
Product.joins(:category=>:parent).where(:category=>{:parent=>{:id=>1}}).all
例外をスローします(適切にフォーマットできません)
Product Load (0.8ms) SELECT `products`.* FROM `products` INNER JOIN `categories` ON `categories`.`id` = `products`.`category_id` INNER JOIN `categories` `parents_categories` ON `parents_categories`.`id` = `categories`.`parent_id` WHERE `parent`.`id` = 1
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'parent.id' in 'where clause': SELECT `products`.* FROM `products` INNER JOIN `categories` ON `categories`.`id` = `products`.`category_id` INNER JOIN `categories` `parents_categories` ON `parents_categories`.`id` = `categories`.`parent_id` WHERE `parent`.`id` = 1
parent.id列が不明なため。
明らかに、クエリは次のようになります(完全に機能しています)。
SELECT `products`.* FROM `products`
INNER JOIN `categories` ON `categories`.`id` = `products`.`category_id`
INNER JOIN `categories` as `parents_categories` ON `parents_categories`.`id` = `categories`.`parent_id` WHERE `parents_categories`.`id` = 1
私も試しました
Product.joins(:category=>:parent).where(:category.parent=>{:id=>1}).all
そしてそれは役に立たなかった
どうぞ、あなたの考え。