rails - how to render a JSON object in a view

27,211

Solution 1

I would recommend that you write that code in an helper itself. Then just use the .to_json method on the array.

# 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) %>

Solution 2

Or use:

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

to escape out any html encoding characters.

Solution 3

<%= @comments.to_json %>

should do the trick too.

Share:
27,211
AnApprentice
Author by

AnApprentice

working on Matter, a new way to gather professional feedback.

Updated on January 28, 2020

Comments

  • AnApprentice
    AnApprentice over 4 years

    right now I'm creating an array and using:

    render :json => @comments
    

    This would be fine for a simple JSON object, but right now my JSON object requires several helpers which is breaking everything and requiring helper includes in the controller which seems to cause more problems than solved.

    So, how can I create this JSON object in a view, where I don't have to worry about doing anything or breaking anything when using a helper. Right now the way I'm making the JSON object in the controller looks little something like this? Help me migrate it to a view :)

    # 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
    

    Thanks!