Filtrar datos sql por fecha tipo YEAR('date_field'), MONTH('date_field')

Hola, tengo algunas duda de con el filtrado de datos por fecha y año

en mi modelo tengo un campo datetime que guarda la fecha , y estoy
pasando
por get el mes y el año para mostrar los resultados, la url es de esta
forma:
home/blog/archivos/10/2005

pero no se que tengo que hacer para manejar el campo datetime para
separalo
en dos campos uno que sea :mes y otro que sea :año y luego hacer el
find y
poner en :conditions=>{:año=>params[‘ano’],:mes=>params[mes`]},

en el sql nomal se como hacerlo sería algo asi :

YEAR(post_cat.fecha) = %s AND MONTH(post_cat.fecha)=%s

pero no me queda claro como hacerlo al estilo rails, que me remcomiendan
en
este caso ¿utilizar un find_by_sql? ¿o trabajar con campos virtuales ,
attr_accessor o algo asi?

Saludos

Hola

en mi modelo tengo un campo datetime que guarda la fecha
campo datetime del modelo es igual a objeto de la clase DateTime en ruby

pero no me queda claro como hacerlo al estilo rails, que me
remcomiendan en este caso
Pues en este caso concreto, como en tantos otros, te recomiendo ir a la
documentación, que es donde yo siempre busco primero por aquello de que
la respuesta es inmediata además de fiable

http://www.ruby-doc.org/core/classes/DateTime.html
http://www.ruby-doc.org/core/files/lib/date_rb.html

Como recomendación general, te diría que si ya llevas un tiempo con
Rails, pases de la primera fase de conocer sólo lo que te explican en
los libros de puro Rails y te mires también algo del lenguaje que lo
hace posible. Verás como después de aprender Ruby le ves muchas más
ventajas a Rails que antes (al menos ésa fue mi experiencia)

Suerte,

javier ramírez

hola de nuevo,

por si he entendido mal la pregunta de antes y tu problema no es separar
en campos un DateTime sino como pasarlo en sql… en la doc también
puedes encontrar que el parámetro conditions de find acepta varias
cosas, una de ellas es una cadena de sql para pasarla como condición al
where. Si el problema es como separar la fecha de sql en campos, ahí le
puedes pasar tu sql directamente sin necesidad de recurrir a un
find_by_sql.

saludos,

javier ramírez

michas Gracias Javier por tu ayuda.

revisaré la documentación y me pondré a estudiar mas de Ruby.

Saludos a todos

Puedes hacerlo facilmente “al estilo rails” asi:

Primero en tu archivo routes:

map.connect ‘archivos/:year/:month/:day’,
:controller => ‘articles’, :action => ‘archive’,
:month => nil, :day => nil, :requirements => { :year => /\d{4}/ }

En tu controlador agrupas tus datos con group_by

def archive
posts = Article.find(:all, :order => ‘created_at’)
@posts_month = posts.group_by { |p| p.created_at.beginning_of_month }
end

y en tu vista

<% @posts_month.sort.each do |month, posts| -%>
<%= month.strftime(“%B %Y”) %>
<%= pluralize posts.size, ‘entrada’ %>

Para mas detalles puedes ver este screencast: