按照多对多关系(rails)的JOIN表中的一列进行排序



我在categorypost之间有一个多对多的关系。联接表为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_relationshipscreated_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_relati‌​onships.created_at')

如果您总是以这种方式排序,则可以在联接表上使用默认作用域。

class CategoryLinkRelationship < ApplicationRecord
  belongs_to :post
  belongs_to :category
  default_scope { order(created_at: :asc)}
end

这将由ActiveRecord自动拾取。请注意,如果Category上也有默认作用域,它将覆盖排序。

相关内容

  • 没有找到相关文章

最新更新