我有has_and_belongs_to_many
关系设置。它看起来像这样:
have_and_belong_to_many
类别have_and_belongs_to_many
图书has_many
本书belongs_to
商店我试图显示每个商店中有多少本书属于每个类别。因此,我的观点将显示商店X有200本书,其中80本是神秘的,60本是非小说类等。
我一直在尝试一些不同的方法来做到这一点,但到目前为止还没有成功。我想我是从错误的地方开始的。任何方向都会非常感激。
由于
顺便说一下,这是Rails 4和psql。
答案 0 :(得分:2)
通常,不使用Rails的内置“has_and_belongs_to_many”方法,最好使用连接表。在此设置中,您有三个表:
BookCategories(或您决定称之为的任何内容)是一个连接表,属于Books和Categories,并且每个都有一个外来ID。然后,您将使用Rails的“has_many:through”链接书籍和类别。
商店与书籍之间存在'has_many'关系。通过先前的关系设置,您可以使用此方法获取特定类别的商店的计数:
Store.books.where(category:'Mystery')
答案 1 :(得分:2)
如果您有一个books_categories
联接表,则可以添加一个has_many :categories, through: :books
关联,链接stores
和categories
到books
。
class Store < ActiveRecord::Base
has_many :books
has_many :categories, through: :books
end
这很容易。现在让我们为每个类别和书籍计数(修订):
def books_per_category
categories.select('categories.id, categories.name, count(books.id) as count').group('categories.id, categories.name').map do |c|
{
name: c.name,
count: c.count
}
end
end