0

すでに述べたように、私は というタイトルのモデルを持っていますCategory

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

特定のタイトルを持つ特定のを持つすべての子を選択する必要があります。 Categories Category

Category.where(:category=>{'parents_categories'=>{:title=>'tea'}}) #wrong

必要に応じて機能していません。実際にはまったく機能していません:

Category Load (0.5ms)  SELECT `categories`.* FROM `categories` WHERE `parent`.`title` = 'tea'
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'parent.title' in 'where clause': SELECT `categories`.* FROM `categories`  WHERE `parent`.`title` = 'tea'

調査を行いましたが、何も見つかりませんでした。どうすれば解決できますか?

更新: モデルにスコープを作成する必要があります。これにより、 (正確に)Category呼び出しを行うことができ、タイトルが ' ' のに属するすべてのカテゴリが返されます。Category.of_tea Categorytea

4

1 に答える 1

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

  scope: with_title, lambda{|text| where(title: text) }

end

category = Category.find(65) #you know, or whatever
tea_categories = category.children.with_title("tea")
于 2012-09-23T19:13:53.747 に答える