例如我有两个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篇文章,有海报,没有它。
例如:
第一篇海报出席
第二篇海报不存在
第3篇海报礼物
第4篇海报礼物
我需要海报出席的文章:1,3,4,2。
在CustomSerializer
或Article
模型中实施它的最佳方式是什么?
答案 0 :(得分:0)
我的解决方案是:
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
答案 1 :(得分:0)
这是使用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)