我在分类和帖子之间有has_and_belongs_to_many
的关系。我正在设置一个范围来查询特定类别中的所有帖子。下面的范围有效,但看起来相当冗长。有没有更好的方法可以重构?
在Post模型中:
scope :in_category, ->(category) { joins(:categories).where(categories_posts: {category_id: category.id} ) }
答案 0 :(得分:0)
我在Post
模型中不知道其他任何方式。
但是创建这个范围是不必要的。假设您已经有Category
个实例,则可以:
category.posts
修改强>
如果您正在寻找一个方法来调用Post
类,请使用此范围(但我认为这会重新发明轮子,因为Rails已经提供了上述方法):
class Post
scope :in_category ->(category) { category.posts }
end
答案 1 :(得分:0)
您可以使用类方法代替使用范围:
class Post < ActiveRecord::Base
def self.in_category(category)
category.posts
end
end
Post.in_category(Category.first)
答案 2 :(得分:0)
def self.in_category(category_id)
category_id.blank? ? all : joins(:category_id).where(:categories_posts => {category_id: category_id})
end
这种方法有一些好处