我在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
查询所有帖子。我想根据联接表category_link_relationships
的created_at
对这些帖子进行排序。每个类别和帖子只能有一条记录。我想按相关关系记录的列created_at
对链接进行排序。
例如,帖子1被创建并关联到类别A。然后,帖子1被关联到类别B。随后创建了员额2,并将其关联到类别B。B类现在有帖子1和帖子2。我想根据关系的created_at
而不是帖子的created_at
对帖子1和帖子2进行排序。
谢谢。
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')
如果您总是以这种方式排序,则可以在联接表上使用默认作用域。
class CategoryLinkRelationship < ApplicationRecord
belongs_to :post
belongs_to :category
default_scope { order(created_at: :asc)}
end
这将由ActiveRecord自动拾取。请注意,如果Category上也有默认作用域,它将覆盖排序。