Filtrando as consultas com has_scope

In: rails| ruby

5 jan 2010

A Plataforma Tecnologia lançou recentemente o has_scope, plugin/gem extraído do InheritedResources (o qual ainda não tive a capacidade de entender o funcionamento).

Ele permite criar filtros nas consultas usando os escopos (named_scopes) definidos no Model de uma forma simples e elegante, mantendo toda a lógica do negócio fora do Controller.

Vamos ao código:

No Model abaixo, implementei dois escopos que gostaria de usar para filtrar a consulta.

# /app/models/timesheet.rb
class Timesheet < ActiveRecord::Base
  named_scope :by_employee, proc { |employee| { :conditions => { :employee_id => employee } } }
  named_scope :by_place, proc { |place| { :conditions => { :place_id => place } } }
end

No Controller, defini quais escopos que vou usar no filtro.

# /app/controllers/timesheets_controller.rb
class TimesheetsController < ApplicationController
  has_scope :by_employee
  has_scope :by_place    
  def index
    @timesheets = apply_scopes(Timesheet).all
  end
end

Na View, criei uma partial com os campos do filtro.

  # /app/views/timesheets/_filter.html.rb
<% form_tag ('/timesheets', :method => :get) do -%>
  <%= select_tag 'by_employee', options_for_select(@employees, params[:by_employee].to_i) %>
  <%= select_tag 'by_place', options_for_select(@places, params[:by_place].to_i) %>
  <%= content_tag(:button, "Search", :type => "submit") %>
<% end -%>

Esse formulário do filtro irá chamar o método index usando GET (através da URL), como no exemplo:

http://localhost:3000/timesheets?by_employee=1&by_place=3

Como de costume, esse post é só um aperitivo. Acesse o completíssimo README no GitHub para mais detalhes de utilização.

Comment Form

Sobre

Ricardo Duarte, 26 anos, trabalha na Nuntec, atua como desenvolvedor web a mais de 12 anos, já tendo passado por diversas tecnologias. Este blog irá comentar um pouco destas experiências.

rduarte's tweets

  • Venicios Ribeiro: É uma excelente forma de ativar o cache. Existem tbm outras tecnicas muito simples, como o Gzip. à [...]
  • Andre Ferraro: Muito bom!! Estou fazendo o meu e vou postar no meu blog. Vlw!! [...]
  • paulo henrique: Bom dia! existe algum app para usar o twitter no e71, que seja free [...]
  • Ricardo: Bruno, Aplicativo para IM com vídeo eu não conheço, mas para áudio você pode usar o Nimbuzz [...]
  • Bruno: Olá boa tarde. Gostaria de saber qual software IM pro E71 suporta conversação com áudio e video. [...]