2012-03-04 9 views
6

Quiero el pedido de salida json por ID (identificación del niño)Cómo "ordenar por identificación" JSON con Rabl

¿Puedo resolver este problema?

Esto es código en mi proyecto

show.json.rabl (utilicé Rabl)

object @book 
attributes :id , :name 

child :questions do 
    attributes :id , :name 
end 

books_controller.rb

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

Lo siento por mi Inglés, Gracias.

Respuesta

4

Depende de su aplicación y de lo que quiere lograr, pero se podría definir un default_scope en el Question modelo así:

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

O se podría definir un default_scope en el modelo Book:

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

Si desea cargar ansiosamente el questions, utilice includes en lugar de join.

1

no sé RABL, pero creo que solo se puede pasar una colección en lugar de un símbolo. dado, para que se :question es una relación has_many en su clase Book, usted podría utilizar un buscador para que:

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

Sí,: la pregunta es una relación de has_many en mi clase de libro, Gracias, lo intento pero todavía no funciona. –

+0

¿qué quieres decir con eso? ¿Cuál es el json resultante? – phoet

+0

por cierto, no se disculpe ni escriba cosas de agradecimiento a sus preguntas. – phoet

0

Haz el pedido en los modelos y el uso rable para consultar el método de ordenación

modelo Pregunta

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

y luego tener un método en el libro

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

Por último, el Rabl sería ser

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

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