我被一个简单的查询再次卡住了。我有以下型号
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)
当包含条件时,它会给我一个错误。我不知道为什么会这样做。我认为这是一个非常基本的联合我可以自己做,但是徒劳无功。
答案 0 :(得分:2)
Category.joins(:item_types, :items).where(:item_type => {:category_id => 1})
答案 1 :(得分: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
答案 2 :(得分:0)
Category.joins(:item_types,:items).where("**categories**.id=?",1)
类别的表名应该在where子句
中