Как "заказать по id " JSON с Rabl

Я хочу, чтобы порядок вывода json по id(дочерний идентификатор)

Могу ли я решить эту проблему?

это какой-то код в моем проекте

show.json.rabl (я использовал Rabl)

object @book
attributes :id , :name 

child :questions do
  attributes :id , :name
end

books_controller.rb

def show
    @book = Book.find(params[:id])
end

Извините за мой английский, спасибо.

3 ответа

Решение

Это зависит от вашего приложения и того, чего вы хотите достичь, но вы можете определить default_scope в Question модель как это:

class Question < ActiveRecord::Base
  default_scope order('id ASC')
end

Или вы могли бы определить default_scope в Book модель:

class Book < ActiveRecord::Base
  default_scope joins(:questions).order('questions.id ASC')
end

Если вы хотите загружать questionsзатем используйте includes вместо join,

Я не знаю RABL, но я думаю, что вы можете просто передать коллекцию вместо символа. учитывая, что ты :question это has_many отношение к вашему Book класс, вы можете просто использовать поиск для этого:

child @book.questions.order('id ASC') do
  attributes :id , :name
end

Выполните заказ в моделях и используйте Rabl для запроса метода заказа.

Модель вопроса

class Question < ActiveRecord::Base
  # ...
  scope :by_id, order('id ASC')
  # ...
end

а затем есть метод в книге

class Book < ActiveRecord::Base
  # ...
  has_many :questions
  # ...
  def ordered_questions
    questions.by_id
  end
  # ...
end

Наконец, ваш Рабл будет

object @book
child :ordered_questions do
  attributes :id, :name
end

https://github.com/nesquena/rabl/issues/387

Другие вопросы по тегам