0

我再次陷入了一个简单的查询。我有以下型号

class Category < ActiveRecord::Base
  has_many :item_types
  has_many :items, :through => :item_types, :source => :category    
end

class ItemType < ActiveRecord::Base
  belongs_to :category
  has_many :items 
end

class Item
  belongs_to :item_type
end

现在我正在尝试编写一个查询来获取属于某个类别的所有项目。我写了一个这样的查询:

Category.joins(:item_types,:items).where("category.id=?",1)

当包含条件时,它会给我一个错误。我不知道为什么会这样。我认为这是一个非常基本的连接,我可以自己做,但徒劳无功。

4

3 回答 3

2
Category.joins(:item_types, :items).where(:item_type => {:category_id => 1})
于 2012-09-14T11:50:48.813 回答
0

如果您想与 ActiveRecord 建立多对多关联,则要简单得多。如果我清楚地理解你的问题,你应该做这样的事情

# app/models/category.rb
class Category < ActiveRecord::Base
  has_many :item_types
  has_many :items, :through => :item_types
end

# app/models/item_type.rb
class ItemType < ActiveRecord::Base
  belongs_to :category
  belongs_to :item
end

# app/models/item.rb
class Item < ActiveRecord::Base
  has_many :item_types
  has_many :categories, :through => :item_types
end

# app/controllers/categories_controller.rb
def show
  @category = Category.find(params[:id])
  @category_items = @category.items
end
于 2012-09-13T13:27:51.327 回答
0
Category.joins(:item_types,:items).where("**categories**.id=?",1)

类别的表名应该在 where 子句中

于 2012-09-13T13:31:16.600 回答