category
和post
之间存在多对多关系。
联接表为category_post_relationships
。
class Post < ActiveRecord::Base
has_many :categories, through: :category_link_relationships
has_many :category_post_relationships , :dependent => :destroy
end
class Category < ActiveRecord::Base
has_many :posts, through: :category_link_relationships
has_many :category_post_relationships , :dependent => :destroy
end
class CategoryPostRelationship < ActiveRecord::Base
belongs_to :post
belongs_to :category
end
如果我有类别,则该类别可以按category.posts
查询所有帖子。我想根据联接表created_at
的{{1}}对这些帖子进行排序。每个类别和帖子只能有一条记录。我想按相关关系记录的category_link_relationships
列对链接进行排序。
例如,创建了帖子1并将其与类别A相关联。
然后,帖子1与B类相关联。
然后创建Post 2并将其与B类关联。
B类现在有帖子1和帖子2.我想按照关系的created_at
对帖子1和帖子2进行排序,而不是created_at
个帖子。
感谢。
答案 0 :(得分:1)
如果您总是以这种方式订购,则可以在连接表上使用默认范围。
class CategoryLinkRelationship < ApplicationRecord
belongs_to :post
belongs_to :category
default_scope { order(created_at: :asc)}
end
这将由ActiveRecord自动选取。注意,如果Category上也有默认范围,它将覆盖排序。
答案 1 :(得分:0)
class Post < ActiveRecord::Base
has_many :category_link_relationships , :dependent => :destroy
has_many :categories, through: :category_link_relationships
end
class Category < ActiveRecord::Base
has_many :category_link_relationships , :dependent => :destroy
has_many :posts, through: :category_link_relationships
end
现在你可以通过下一个方式找到帖子:
@category.posts.joins(:category_link_relationships).order('category_link_relationships.created_at')