我在模型之间有一个相当复杂的关系,现在对检索一些对象的 SQL 查询感到沮丧。
给定Product 模型通过 has_many连接到类别模型:通过关联和联合表分类。还有一个用户模型通过 has_many :through 关联和联合表 *category_friendship*连接到此类别模型。
我现在面临检索所有产品的问题,这些产品在数组 user.category_ids 的类别中。但是,我不能仅仅设法正确地编写 WHERE 语句。
我试过这个:
u = User.first
uc = u.category_ids
Product.where("category_id IN (?)", uc)
但是这不起作用,因为它在产品表中没有直接的 category_id。但是我怎样才能改变它来使用联合表分类呢?
我给你的模型细节,也许你会发现它有助于回答我的问题:
产品.rb
class Product < ActiveRecord::Base
belongs_to :category
def self.from_users_or_categories_followed_by(user)
cf = user.category_ids
uf = user.friend_ids
where("user_id IN (?)", uf) # Products out of friend_ids (uf) works fine, but how to extend to categories (cf) with an OR clause?
end
类别.rb
class Category < ActiveRecord::Base
has_many :categorizations
has_many :products, through: :categorizations
has_many :category_friendships
has_many :users, through: :category_friendships
分类.rb
class Categorization < ActiveRecord::Base
belongs_to :category
belongs_to :product
Category_friendship.rb
class CategoryFriendship < ActiveRecord::Base
belongs_to :user
belongs_to :category
用户.rb
类用户 < ActiveRecord::Base
has_many :category_friendships
has_many :categories, through: :category_friendships
def feed
Product.from_users_or_categories_followed_by(self) #this should aggregate the Products
end
如果您需要更多详细信息来回答,请随时询问!