我从我的数据库获取信息
@teams = Team.select(:id,:name)
然后,我使用assosiation呈现此信息
render json: @teams, include: :players
这产生了以下输入:
[
{
"id": 1,
"name": "Lyon Gaming",
"players": [
{
"name": "Jirall",
"position": "Superior",
},
{
"name": "Oddie",
"position": "Jungla",
}
]
}
我怎么需要按特定顺序排序玩家(不按字母顺序排列)
我已经有了sql语句来做这件事;我怎么不知道如何将这种方法应用于每个协会。
我看起来像是:
render json: @teams, (include: :players, method: custom_order)
但这引起了我的错误。
有什么想法吗?
答案 0 :(得分:1)
这应该有效:
render json: @teams, include: :players, methods: :custom_order
我想补充一点,如果你总是希望以这种方式返回对象,你可以将它添加到你的模型中:
def as_json(options = nil)
super(include: :players, methods: :custom_order)
end
正如Adam所提到的,如果你的渲染json开始变得丑陋,那么active_model_serializers是很好的。如果复杂性不会增长太多,我总是建议保持依赖关系。
答案 1 :(得分:0)
您需要阅读有关rails中序列化程序的更多信息(这是一种很好的做法) 这里有一篇关于这个https://www.sitepoint.com/active-model-serializers-rails-and-json-oh-my/
的好文章然后你可以做这样的事情
应用程序/串行器/ team_serializer.rb
class TeamSerializer < ActiveModel::Serializer
attributes :id, :name, :ordered_players
end
应用程序/控制器/ teams_controller.rb
def index
respond_with(Team.all.map(&TeamSerializer.method(:new)))
end