ruby-on-rails - define - rails guides partials



No Rails, como você renderiza o JSON usando uma view? (6)

Suponha que você esteja no seu controlador de usuários e queira obter uma resposta json para uma solicitação de show, seria bom se você pudesse criar um arquivo em suas views / users / dir, chamado show.json e após seus usuários # show ação for concluída, renderiza o arquivo.

Atualmente, você precisa fazer algo nos seguintes moldes:

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json{
      render :json => @user.to_json
    }
  end
end

Mas seria legal se você pudesse simplesmente criar um arquivo show.json que é automaticamente renderizado assim:

def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

Isso me pouparia toneladas de sofrimento, e iria lavar aquela sensação horrivelmente suja que eu recebo quando eu renderizo meu json no controle

https://src-bin.com


Answer #1

Apenas para atualizar esta resposta para os outros que acabam nesta página.

No Rails 3, você só precisa criar um arquivo em views/users/show.json.erb . O objeto @user estará disponível para a view (assim como seria para html). Você nem precisa to_json .

Para resumir, é só

# users contoller
def show
  @user = User.find( params[:id] )
  respond_to do |format|
    format.html
    format.json
  end
end

e

/* views/users/show.json.erb */
{
    "name" : "<%= @user.name %>"
}

Answer #2

Basta adicionar o arquivo show.json.erb com o conteúdo

<%= @user.to_json %>

Às vezes, é útil quando você precisa de alguns métodos auxiliares extras que não estão disponíveis no controlador, por image_path(@user.avatar) , image_path(@user.avatar) ou algo para gerar propriedades adicionais no JSON:

<%= @user.attributes.merge(:avatar => image_path(@user.avatar)).to_json %>


Answer #4

Im novo para RoR isto é o que eu descobri. você pode renderizar diretamente um formato json

def YOUR_METHOD_HERE
  users = User.all
  render json: {allUsers: users} # ! rendering all users
END

Answer #5

Tente adicionar uma view users/show.json.erb Isso deve ser renderizado quando você faz uma requisição para o formato JSON, e você obtém o benefício adicional de ser renderizado pelo erb também, então seu arquivo pode ser parecido com isto

{
    "first_name": "<%= @user.first_name.to_json %>",
    "last_name": "<%= @user.last_name.to_json %>"
}

Answer #6

Você deve poder fazer algo assim em seu bloco respond_to :

respond_to do |format|
    format.json 
    render :partial => "users/show.json"
end

que irá renderizar o template em app/views/users/_show.json.erb .





rendering