Home


Uso de before_filter e associações

postado em 22/07/2011 12:04 por Cezinha Cezer   [ 22/07/2011 12:30 atualizado‎(s)‎ ]

Seguindo com mais um post sobre Ruby on Rails, dessa vez vou mostrar e falar um pouco sobre o uso de filtros e associações nas aplicações.

Estou fazendo o tutorial utilizando Ruby 1.9.6 e Rails 3.0.4

Existem vários tipos de filtros e cada um com uma função diferente, nesse tutorial vamos nos prender no uso do before_filter de maneira simples.

Primeiro vamos criar uma aplicação qualquer, e gerar dois scaffolds, um para post e outro para autor.


rails new Aplicacao –d mysql #criação da aplicação

rake db:create #criação do banco

#criação dos scaffolds

rails g scaffold author name:string

rails g scaffold post title:string content:string author:references

rake db:migrate #migra o banco de dados

rails s #inicia servidor


No Segundo scaffold existe um ‘author:references’ que vai fazer com que seja gerado uma chave estrangeira de autor para cada post, a ideia é que quando for cadastrado um novo post possa existir a opção de selecionar quem foi o autor que o fez atraves de um combobox.

Inicie o servidor com o comando 'rails s' e cadastre alguns autores para a aplicação.




Observe que no crud de post existe o campo ‘author’ se formos olhar no banco de dados, esse campo é do tipo integer e deve estar com o nome ‘author_id’, como usamos um ‘author:references’ na criação do scaffold ele gerou essa chave estrangeira.Agora o que precisamos fazer e tirar aquele campo texto, e colocar um combobox para listar todos os autores, e quando for gravado um novo registro a gravação funcione,gravando apenas o ID do autor para aquele post.

vá até o posts_controller.eb e faça a seguinte mudança.



Na linha 3 dizemos ao controller de post ‘antes de qualquer ação chame o método load_authors’ e é exatamente o que ele irá fazer,  na linha 86 temos o método que irá carregar todos os autores e deixá-los disponíveis para todas as ações.

*Observação, os filtros possui a opções :only => [] , :except => [], que podemos definir em quais ações do filtro será chamado.

*Por padrões se não for informado nada, ele irá agir sobre todas as ações padrões do rails, as restfull, caso você tenha uma action própria, a mesma deverá ser passada na opção :only =>  [], do método.

Agora precisamos ir na view _form.html.erb do post e fazer com que ele liste todos os autores, faremos isso,usando o form_helper collection_select


Para a pequena aplicação ficar pronta, é necessário uma alteração na view de index e show, da maneira que ela está no campo autor será exibida a referencia ao objeto autor, e o que queremos é o seu nome, como fechamos um relacionamento em que post  pertence a um autor, o objeto post possui um autor atrelado e é possível recuperar seu nome, somente chamando o método name do autor.

                Fazendo a mesma coisa na view de show, estará tudo ok!

Rode o servidor novamente e pronto!

                Links interessantes :

            Associações do Active Record : http://guias.rubyonrails.pro.br/association_basics.html

            Referencia do collection_select : http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

Filtrando dados por Categorias

postado em 06/07/2011 16:09 por Cezinha Cezer   [ 06/07/2011 17:43 atualizado‎(s)‎ ]

Começando a postar no blog hoje vou mostrar como fazer um filtro simples de produtos por Categoria, utilizando Rails 3.0.4 e Ruby  1.9.6  :D

                O Primeiro passo é a criação de um projeto utilizando o banco de dados MySQL.
            
                
rails new Aplicacao –d mysql

                Com a aplicação criada, vamos acessar a pasta do projeto e criar o banco de dados com o comando

rake db:create

após o banco criado, vamos gerar os scaffolds da aplicação , serão dois

rails g scaffold Category name:string

      rails g scaffold Product name:string category:references

      rake db:migrate

                Simples, só pra mostrar como funcionara a busca.

                Agora faremos uma alteração no controller e view de produtos para ela trazer um combobox com as categoria para o produto.

                Primeiro fazemos a alteração no controller de product para que ele traga todos as categorias , faremos isso usando um before_filter, que irá buscar todas as categorias, antes de chamar qualquer action do controller , da maneira como está na imagem abaixo :

                


                Agora faremos uma alteração na view para que ela traga um combox na hora de cadastra um novo Product

                    

           

            Agora ao entrar no Edit/new do Product ele trará um combobox com as opções de categoria.

            Agora teremos outra alteração dessa vez em views/layouts/application.html.erb , para que ele tenha um menu de acesso aos scaffolds


          


       

            Inicie o servidor e teste a aplicação fazendo alguns cadastros para ambos scaffolds

           

rails server 

            Agora vamos a parte onde faremos o filtro de categorias, vamos até a view de index de produtos e faremos ela listar todas as categorias.

            


            Feito isso agora precisamos mudar a busca na action index do controller de product que é pra onde vai ser enviado o parâmetro :category_id.

            Faremos uma alteração deixando assim  a principio:

            


            Testando no navegador, já podemos ver o resultado, o filtro acontece de acordo com a categoria passada



           

            O codigo está pronto, mas pode ser melhorado, tendo em vista que o Rails adota a convenção ‘modelos gordos, controllers magros’ podemos passar a logica de filtro para um metodo no modelo de Product, e apenas chama-lo, ficando dessa maneira no modelo de Product


                Agora é só chamar esse método no controller assim  :



           
            Abraço :)
            Luiz Cezer.

Iniciando o Blog...

postado em 05/05/2011 10:02 por Régis Eduardo Weizenmann Gregol   [ 05/05/2011 10:07 atualizado‎(s)‎ ]

Olá, seja bem-vindo(a)!
Esse blog foi desenvolvido com intuito de ajudar você desenvolvedor Rails.
Com soluções simples, ou complicadas, esperamos chegar a bons resultados, e fazer desse blog mais um entre tantos que ajudam por ai.
Estou fazendo esse post realmente pra testar, olha ai valtinho =).
        
Grande abraço a todos, até a próxima!

testando

map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format'

Grande abraço a todos, até a próxima!
Grande abraço a todos, até a próxima!
Grande abraço a todos, até a próxima!

1-3 of 3