O que exatamente você quer saber? ActiveRecord tem métodos que serializam registros em JSON. Por exemplo, abra o console do Rails e entre ModelName.all.to_json
e você verá a saída JSON. render :json
essencialmente chama to_json
e retorna o resultado ao navegador com os cabeçalhos corretos. Isso é útil para chamadas AJAX em JavaScript nas quais você deseja retornar objetos JavaScript para uso. Além disso, você pode usar ocallback
opção para especificar o nome do retorno de chamada que deseja chamar via JSONP.
Por exemplo, digamos que temos um User
modelo parecido com este:{name: 'Max', email:' m@m.com'}
Também temos um controlador parecido com este:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user
end
end
Agora, se fizermos uma chamada AJAX usando jQuery como este:
$.ajax({
type: "GET",
url: "/users/5",
dataType: "json",
success: function(data){
alert(data.name) // Will alert Max
}
});
Como você pode ver, conseguimos obter o usuário com id 5 de nosso aplicativo rails e usá-lo em nosso código JavaScript porque ele foi retornado como um objeto JSON. A opção de retorno de chamada apenas chama uma função JavaScript do nome passado com o objeto JSON como o primeiro e único argumento.
Para dar um exemplo da callback
opção, dê uma olhada no seguinte:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
render json: @user, callback: "testFunction"
end
end
Agora podemos criar uma solicitação JSONP da seguinte maneira:
function testFunction(data) {
alert(data.name); // Will alert Max
};
var script = document.createElement("script");
script.src = "/users/5";
document.getElementsByTagName("head")[0].appendChild(script);
A motivação para usar esse retorno de chamada é normalmente contornar as proteções do navegador que limitam o compartilhamento de recursos de origem cruzada (CORS). JSONP não é mais usado, entretanto, porque existem outras técnicas para contornar o CORS que são mais seguras e fáceis.