Как "заказать по id" JSON с Rabl - PullRequest
6 голосов
/ 04 марта 2012

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

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

это код в моем проекте

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 ]

4 голосов
/ 07 марта 2012

Это зависит от вашего приложения и того, чего вы хотите достичь, но вы можете определить 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.

1 голос
/ 04 марта 2012

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

child @book.questions.order('id ASC') do
  attributes :id , :name
end
0 голосов
/ 27 июня 2014

Выполните заказ в моделях и используйте 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

...