ajax: posts/_post.html.erb: <tr id="post_<%= post.id %>"> <td><%= post.title %></td> <td><%= truncate post.body, :length => 20 %></td> <td><%= post.publication.strftime "%Y-%m-%d %H:%M:%S" %></td> <td><%= post.enabled %></td> <td><%= link_to 'Show', post, :remote => true %></td> <td><%= link_to 'Edit', edit_post_path(post), :remote => true %></td> <td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete, :remote => true %></td> </tr> Note que coloquei um id dinamico no 'tr', e nos liks adicionei ':remote => true' e ele que ira fazer a magica no Ajax, coloque ele tambem no 'form'. <%= simple_form_for(@post, :remote => true) do |f| %> Na index coloque um render para esse partial. posts/index.html.erb: <% @posts.each do |post| %> <%= render post%> <% end %> Adicione tambem o link 'New' um pouco abaixo: <%= link_to 'New', '/posts/new', :remote => true %> E uma div onde sera chamado o formulario: <div id="form"> </div> Crie um arquivo 'new.js.erb' e dentro dele coloque o codigo abaixo: $('#form').empty(); $("#form").append("<%= escape_javascript(render(:partial => "form"))%>"); Esse codigo e bem simples, a primeira linha vai deixar vazio a div 'form', por um simples motivo, se voce nao colocar essa linha sempre que clicar em um botao ele vai criar um novo elemento em vez de excluir o antigo. A segunda linha chama o partial do 'form'. Crie um arquivo 'create.js.erb' e adicione o codigo abaixo: $('#posts').append('<%= escape_javascript(render(@post)) %>'); $("#new_post")[0].reset(); A primeira linha chama o partial 'post' que nos criamos e adiciona mais um elemento na lista. A segunda limpa o formulario para poder ocorrer mais um cadastro. Para finalisar, melhore o controller assim: def create @post = Post.new params[:post] flash[:notice] = 'Post was successfully created.' if @post.save respond_with @post end Agora o 'Show', mais acima ira notar que o link para o 'Show' ja fi criado. Adicione a div abaixo na index, ela sera o guia que utilizaremos para a aparicao do show. <div id="show"> </div> Crie um arquivo 'show.js.erb' e adicione o codigo abaixo: $('#show').empty(); $('#show').append('<h2>Show post</h2><p><b>Title: </b><%= @post.title %></p><p><b>Body: </b><%= @post.body %></p><p><b>Publication: </b><%= @post.publication.strftime "%Y-%m-%d %H:%M:%S" %></p><p><b>Enabled: </b><%= @post.enabled %></p>'); Como acontece no 'New' a primeira linha e para limpar se existir algo antes. A segunda ira exibir o item ao ser clicado, o append vai exibir tudo que estiver dentro dele. O proximo e o destroy, e o mais simples de todos, crie o arquivo 'destroy.js.erb' e adicione: $('#post_<%= @post.id %>').remove(); Vai remover a linha exata que voce destruir. O ultimo e editar, e bem parecido que o criar, crie os arquivos 'edit.js.erb' e 'update.js.erb': posts/edit.js.erb: $('#form').empty(); $("#form").append("<%= escape_javascript(render(:partial => "form"))%>") Mesma explicacao do 'New'. posts/update.js.erb: $("#post_<%= @post.id %>").replaceWith("<%= escape_javascript(render(:partial => @post)) %>"); <% @post = Post.new %> $(".simple_form").replaceWith("<%= escape_javascript(render(:partial => "form"))%>") Primeira linha, vai adicionar o elemento criado na lista. Segundo e terceira linha, vai resetar a variavel de instancia para ao editar o formulario, se modifique de edicao para criacao. Deixe o metodo update no controller da forma abaixo: def update @post = Post.find params[:id] flash[:notice] = 'Post was successfully updated.' if @post.update_attributes params[:post] respond_with @post end Pode apagar agora os arquivos abaixo, as suas funcionalidades nao serao mais necessarias ja que foram migradas. new.html.erb edit.html.erb