Este é um post disponível para assinantes MVPRuby 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.
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Mobile magazine 32
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
Space do autor



0
0
