例如,我有两个activeRecord模型:
class Article < ActiveRecord::Base
has_one :article_poster
end和
class ArticlePoster < ActiveRecord::Base
belongs_to :article
end在某些控制器中:
CustomSerializer.new(articles)CustomSerializer:
class CustomSerializer < ActiveModel::Serializer
end我有4篇文章,有海报,没有海报。例如:
第一篇海报
第二篇文章海报不存在
第三篇海报
第四篇海报
我需要文章以海报的形式排列: 1,3,4,2。在CustomSerializer或Article模型中实现它的最佳方法是什么?
发布于 2016-12-26 17:00:18
我的解决办法是:
class CustomSerializer < ActiveModel::Serializer
def initialize(resources, options = {})
resources = sort(resources)
super(resources, options)
end
def sort(resources)
top = []
regular = []
resources.each do |article|
if article.poster
top << article
else
regular << article
end
end
resources = top + regular
end
end发布于 2016-12-26 18:12:35
下面是使用sql的解决方案
class Article < ActiveRecord::Base
has_one :article_poster
scope :join_article_posters, -> {
joins('LEFT OUTER JOIN article_posters ON article_posters.article_id = article.id') }
}
scope :posters_first -> { join_article_posters.order(article_posters: { id: :desc }) }
end根据数据库的不同,posters_first可能会做得更好。
CustomSerializer.new(articles.posters_first)https://stackoverflow.com/questions/41333422
复制相似问题