DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Mobile magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Ruby on Rails: Loja de Livros – Parte 4 - Artigo WebMobile Magazine 32

Nesse artigo aprimoraremos a experiência de navegação criando filtros para busca de livros por autor e categoria e por palavra-chave, o que dará ao usuário novas formas de procurar livros. Em seguida, implementaremos nosso carrinho de compras utilizando Ajax.






Desenvolvendo uma Loja de Livros com Ruby on Rails – Parte 4


De que se trata o artigo:
Nesse artigo aprimoraremos a experiência de navegação criando filtros para busca de livros por autor e categoria e por palavra-chave, o que dará ao usuário novas formas de procurar livros. Em seguida, implementaremos nosso carrinho de compras utilizando Ajax.

Para que serve:
Com os recursos citados nesse artigo, poderemos criar aplicações que possuam filtros de busca. Além disso, aprenderemos a utilizar Ajax para realizar requisições na aplicação sem refresh do browser.

Em que situação o tema útil:
A utilização das ferramentas descritas no artigo proporciona a criação de novos recursos úteis em uma aplicação, como a busca e a utilização de filtros baseado nas informações do banco de dados. Já a utilização de Ajax é importante para proporcionar ao usuário uma experiência de navegação ágil e sem haver, a todo instante, páginas sendo recarregadas.


no menu aplicaremos opções de filtros para exibir os autores e as categorias presentes em nossa loja. Além disso, implementaremos o carrinho de compras e posteriormente colocaremos uma pitada de Ajax, para melhorar a experiência do usuário ao comprar um livro.

Busca e filtros de categoria e autor

No artigo da última edição, utilizamos a gem will_paginate para paginar os livros em uma quantidade específica – nove livros por página. Cada livro da nossa loja virtual possui cadastrado um autor e um estilo literário, e com base nessas informações, criaremos no menu lateral do site links para localizar livros por esses critérios. Além disso, um campo de busca será adicionado para que o usuário possa tentar localizar livros a partir de sua necessidade.

Para implementarmos essas funcionalidades, utilizaremos um plugin chamado Squirrel, que permite montar queries do SQL através de blocos Ruby. Para instalar esse plugin no aplicativo em desenvolvimento, execute no terminal o comando:

script/plugin install http://github.com/thoughtbot/squirrel.git

Dessa forma os arquivos do plugin serão copiados para a pasta app/vendor/plugins do projeto. Em seguida, abra o arquivo books_controller.rb. O método index será reescrito para o apresentado na Listagem 1, utilizando as funcionalidades do plugin para a filtragem de livros.

Listagem 1. Método index de books_controller.rb.

 1  def index

 2    @books = Book.find :all do

 3      paginate :page => params[:page], :per_page => 9

 4      all do

 5        author.name == params[:author] if params[:author]

 6        category.name == params[:category] if params[:category]

 7      end

 8      order_by price

 9    end

10  end

Veja que o método find agora recebe opções em várias linhas, organizadas em bloco, como um bloco de código gerado para processamento de um comando if. Dentro desse conjunto de opções, na linha 3 são passados os parâmetros necessários para que o will_paginate funcione. Em seguida é executado um novo bloco onde serão relacionados todos os registros desde que possuam um autor como especificado pela variável params[:author] e uma categoria como especificado pela variável params[:category]. Esses registros serão ordenados de acordo com o preço, como especificado na linha 8. Para testar essa funcionalidade, experimente carregar a URL http://localhost:3000/?category=infantil. Ela deverá filtrar todos os livros que foram cadastrados na categoria infantil, como mostra a Figura 1.As URLs do aplicativo são organizadas através de suas rotas, que são descritas no arquivo routes.rb. Vamos modificar esse arquivo para criarmos duas rotas personalizadas: /category/nome-da-categoria e /author/nome-do-autor, com a intenção de aprimorar a legibilidade dos endereços da loja. As novas rotas estão apresentadas na Listagem 2.

Listagem 2. Rotas adicionadas ao routes.rb.

map.with_options :controller => 'books', :action => 'index' do |book|

  book.author '/author/:author', :author => :author

  book.category '/category/:category', :category => :category

end

 

                Feito isso, vamos editar as views index.html.erb e show.html.erb para exibirem os nomes da categoria e do autor com links para as páginas com os respectivos filtros. Retire as variáveis que exibem o nome da categoria e autor na view index.html.erb:

... e no lugar, acrescentaremos links das respectivas categoria e autor. Essa alteração criará um atalho para a busca de livros atendendo a esses critérios, aprimorando a navegação do usuário.

A mesma alteração deve ser realizada na view show.html.erb. Remova as linhas que mostram categoria e autor:

 

Categoria: <%=h @book.category.name %>~

Autor: <%=h @book.author.name %>

 

... e acrescente os links que apontam para a filtragem de livros por categoria e autor.

 

Categoria: <%= link_to @book.category.name, category_path(@book.category.name) %>~

Autor: <%= link_to @book.author.name, author_path(@book.author.name) %>

 

Com essa alteração, damos ao usuário mais uma possibilidade de listagem dos dados da loja virtual. Para terminar, acrescentaremos no menu lateral uma lista com todos os autores e todas as categorias de livros cadastrados. A Listagem 3 apresenta como fica o novo menu.

 

Listagem 3. Novo menu do layout (application.html.rb).

 1 

 2           

Minha conta

 3            <% if current_user %>

 4                            Bem vindo <%= current_user.username %>!

 5                            <%= link_to "Editar", edit_user_path(:current), :class => "item_menu" %>

 6                            <%= link_to "Logout", logout_path, :class => "item_menu" %>

 7            <% else %>

 8                            <%= link_to "Entrar", login_path, :class => "item_menu" %>

 9                            <%= link_to "Registrar", new_user_path, :class => "item_menu" %>

10           <% end %>

11          

12           "



ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Mobile magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Leonardo Faria

Trabalha com desenvolvimento web. Trabalha com treinamentos, criação de interfaces usando webstandards e Flash. Desenvolve também em PHP e Rails.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03