ruby-on-rails - rails - ruby render json
No Rails, como você renderiza o JSON usando uma view? (6)
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 %>"
}
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
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 %>
Esta é potencialmente uma opção melhor e mais rápida que o ERB: https://github.com/dewski/json_builder
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
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 %>"
}
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
.