Pular para o conteúdo principal

Aliando: Rails + Ajax


Ok, vamos a mais um post... Hoje sobre como aliar todo o poder da aplicação web, neste caso rails, com o poder da metodologia Ajax, neste caso o framework prototype.

O que vamos fazer é criar um método e chamar e receber os dados via javascript. Ou em outras palavras, javascript com acesso ao banco de dados.


Existe hoje muitos frameworks javascrit que facilitam o trabalho na hora de fazer requisições ajax, por exemplo: jquery, motools e no nosso caso prototype.

Como o rails é mantido sobre a metodologia MVC, ou MVC2, ou arquitetura três camadas, iremos criar uma action na controller que será visualizada pela requisição javascript.


Vamos lá então... É bem simples:

Esta é a controller:

	
	class TestController < ApplicationController
  def me_chama
    render :text => "Hello, world"
  end
end


Ok, agora vamos invocar este método através do javascript...


<script>
  function chama(){
    url = '/test/me_chama'; 
    new Ajax.Request(url, {onComplete: function(transport){ alert(transport.responseText); } });
  }
</script>

E é isso... o método Request da classe Ajax do prototype irá chamar a url '/test/me_chama', que é a controller + action e que retornará a string 'Hello, world'.


Ok, agora imagina toda vez que eu chamar a action “chama” eu quero passar um parametro e desse paramtero fazer uma pesquisa no banco...

Vamos lá... a função javascript vai agora enviar um parametro para ser recebido lá na camda de controller e ser feito o select ao banco. Este parametro será enviado via post, extamente desta forma:

<script>

function chama(){

url = '/test/me_chama/?id_pessoa=1';

new Ajax.Request(url, {onComplete: function(transport){ alert(transport.responseText); } });

} </script>

O parametro enviado chama 'id_pessoa' e será pego na action assim: params[:id_pessoa]

A action será mais ou menos assim... Antes a model( ORM ) Pessoa (Person) para retornar os dados do banco) :


class Person < ActiveRecord::Base; end

class TestController < ApplicationController

  def me_chama
    nome_pessoa = Person.find( params[:id_pessoa] ).nme_pessoa rescue 'Nenhuma pessoa encontrada para esse código'
    render :text => nome_pessoa.to_s
    
    #-- Ou passando um objeto jason:
    #pessoa = Person.find( params[:id_pessoa] )
    # render :json => nome_pessoa.to_json
  end

end

E é isso...

Aqui alguns tipos de parametros do método render do rails, para quem quiser saber mais.

Qualquer dúvidas, reclamações, sugestões e/ou erros de português é só entrar em contato...Abraço e até mais!!!


Comentários

Postagens mais visitadas deste blog

Números Primos + MMC + MDC + Ruby

Segue abaixo um exemplo de implementação de gerador de Números Primos + MMC ( Mínimo Múltiplo Comum ) + MDC ( Máximo Divisor Comum ) em ruby. É um resultado de uma prova de lógica que um amigo meu teve que fazer em java. Colaborações prestimosas de Cirillo Ferreira. require 'Mathn' class Numeric def multiplos(ate = 500) (1..ate).to_a.map{|v| self*v} end def divisores(ate = 500) (1..ate).to_a.map{|v| v if (self%v == 0)}.compact end end module Math def self.mmc(*valor) compara( valor.inject([]){|h, i| h << i.multiplos} ).first end def self.mdc(*valor) compara( valor.inject([]){|h, i| h << i.divisores } ).last end def self.nmr_primos numeros_primos = [] (2..501).each{|i| numeros_primos << (2..i).detect{|j| j%j ==0 && i%j==0} } numeros_primos.uniq! end private def self.compara(arr) arr.inject(arr[0]){|ac, i| ac & i} end end Math::mmc(3,5,8) => 120 Math::mmc(3,5,8,9) => 360 Os métodos mmc e mdc são métodos que aceitam parâmetros indetermi

Naturalismo (1870-1900)

Naturalismo é uma escola literaria, vertente do realismo também definido como o realismo extremo. Procura explicar cientificamente (com negação do sentimento e da metafísica) a conduta e o modo de ser dos seres por meio dos fatores externos e da natureza biológica e sociológica. "Os seres são como produtos, como consequência de forças preexistente que limitam a sua responsabilidade e os tornam, nos casos extremos, verdadeiros joguetes das condições. [...] o efeito das taras, das doenças, dos vícios, na formação/desvio do caráter juntando-lhes os efeitos complementares da formação familiar, da educação, do nível cultural." Antonio Candido e José Aderaldo Castello "O Romantismo era a apoteose do sentimento; - o Realismo é a anatomia do caráter. É a crítica do homem. É a arte que nos pinta a nossos próprios olhos - para condenar o que houve de mau na nossa sociedade." Eça de Queirós Teorias: Zoomofismo Determinismo do meio Evolucionismo Eugenia Naturalismo

Rails3 + Ruby1.9 + Dalli (memcache-client)

Após a revolução  cientifico-tecnológico, vivemos agora a terceira revolução industrial, a revolução feita a partir da informação. Dai a importância dos computadores, do meio técnico (a infraestrutura), e por conseguinte - e reservando suas proporções, a ferramenta mencached -- Gem memcache-client não implementa Rails3 app mais. É necessário, agora, usar a poética gem: Dalli . Caso sua aplicação use muita sessão (como a minha). Com certeza terá um problema com a nova gem do memcached. O serializer do Dalli é o Marshal. (Você pode alterar para o qual você quiser: yajl-ruby , ...).  Loading .... Leia também: bashar3a (in English) Revolução Técnico-ciêntifico-informacional Prof. Milton Santos Salvador Dali Surrealismo