Gracias Guillermo,
después de echarle unas horas mas he conseguido hacer esto.
Me he creado la clase Filtro: Filtro.rb
*
*class Filtro
attr_accessor :provincia_id, :tipo, :condiciones
def initialize(options = {})
unless options.nil?
@provincia_id = options[:provincia_id].to_i || nil
@tipo = options[:tipo] || nil
@condiciones ||= crea_condiciones
else
@provincia_id = nil
@tipo = “”
@condiciones = “”
end
end
private
#Definimos que campos van a actuar en el filtro
def provincia_filtro
[“provincia_id = ?”, provincia_id ] unless provincia_id.blank?
end
def tipo_filtro
[“tipo = ?”, self.tipo ] unless tipo.blank?
end
Juntamos las condiciones
def crea_condiciones
[sql_condiciones.join(’ AND '), *valores_condiciones]
end
def sql_condiciones
partes_condiciones.map {|c| c.first }
end
def valores_condiciones
partes_condiciones.map {|c| c[1…-1] }.flatten
end
#Busca todos los metodos que definen el filtro
def partes_condiciones
private_methods(false).grep(/_filtro$/).map {|c| send(c)}.compact
end
end
En el controlador en que vayamos lo usamos asÃ:
@filtro = Filtro.new(params[:filtro])
@listado = Marker.find(:all, :conditions =>@filtro.condiciones)
En la vista ponemos lo siguienete:
<% form_for @filtro, :url=>listado_localizador_url,:html=>{
:method=>:get}
do |f| %>
Provincia: <%= f.select :provincia_id, Provincia.listado , {
:include_blank => true }%>
Tipo Barrera: <%= f.select :tipo, Marker.tipos, { :include_blank =>
true }
%>
<%= f.submit “Buscar”, :name=>nil %>
<% end %>
¿Sugerencias?
El 24 de mayo de 2009 13:04, Pedro MarÃn [email protected] escribió: