2011-03-01 10 views
16

En este momento estoy creando una matriz y usando:rieles - cómo hacer que un objeto JSON en una vista

render :json => @comments 

Esto estaría bien para un objeto JSON simple, pero en este momento mi objeto JSON se necesitan varias ayudantes que está rompiendo todo y que requiere ayuda incluye en el controlador que parece causar más problemas que resueltos.

Entonces, ¿cómo puedo crear este objeto JSON en una vista, donde no tengo que preocuparme de hacer nada o romper nada cuando uso un ayudante? En este momento, la forma en que estoy haciendo el objeto JSON en el controlador se ve algo así como esto? Ayudame a migrarlo a una vista :)

# Build the JSON Search Normalized Object 
@comments = Array.new 

@conversation_comments.each do |comment| 
    @comments << { 
    :id => comment.id, 
    :level => comment.level, 
    :content => html_format(comment.content), 
    :parent_id => comment.parent_id, 
    :user_id => comment.user_id, 
    :created_at => comment.created_at 
    } 
end 

render :json => @comments 

¡Gracias!

+0

Poco confundido por "requiere varios ayudantes", ¿qué ayudantes, para hacer qué? – macarthy

+0

html_format es un ayudante que los usuarios simple_format y auto_link. Ahí es donde está todo el problema. – AnApprentice

+1

Siga [estas pautas] (http://stackoverflow.com/questions/2088280/in-rails-how-do-you-render-json-using-a-view/2088378#2088378) –

Respuesta

13

Le recomendaría que escriba ese código en un helper. Luego solo use el método .to_json en la matriz.

# application_helper.rb 
def comments_as_json(comments) 
    comments.collect do |comment| 
    { 
     :id => comment.id, 
     :level => comment.level, 
     :content => html_format(comment.content), 
     :parent_id => comment.parent_id, 
     :user_id => comment.user_id, 
     :created_at => comment.created_at 
    } 
    end.to_json 
end 

# your_view.html.erb 
<%= comments_as_json(@conversation_comments) %> 
+0

Espera ... ¿Es el ser dentro de un helper significa que puede usar cosas como simple_format, etc. sin necesidad de incluir? – AnApprentice

+0

Si lo hice con el hecho de que html_format usa simple_format y auto_link, ¿hay algún problema? – AnApprentice

+0

Supongo que ya te encontraste esa respuesta, pero sí, no necesitas incluir explícitamente otros ayudantes dentro de un ayudante. Nota: Esto requiere que su ApplicationController tenga 'helper: all' (valor predeterminado). –

6
<%= @comments.to_json %> 

debe hacer el truco también.

22

o usar:

<%= raw(@comments.to_json) %> 

para escapar fuera de cualquier carácter html codificación.

Cuestiones relacionadas