Rails 3.2 enrutamiento url amigable por fecha

Quiero implementar la aplicación blog \ noticias con la capacidad de:

mostrar todos los mensajes en la raíz:example.com/Mostrar todos los mensajes respondiendo algún año:example.com/2012/Mostrar todos los mensajes respondiendo algún año y mes:example.com/2012/07/mostrar algún post por su fecha y babosa:example.com/2012/07/slug-of-the-post

Así que he creado una maqueta pararoutes.rb expediente:

# GET /?page=1
root :to => "posts#index"

match "/posts" => redirect("/")
match "/posts/" => redirect("/")

# Get /posts/2012/?page=1
match "/posts/:year", :to => "posts#index",
  :constraints => { :year => /\d{4}/ }

# Get /posts/2012/07/?page=1
match "/posts/:year/:month", :to => "posts#index",
  :constraints => { :year => /\d{4}/, :month => /\d{1,2}/ }

# Get /posts/2012/07/slug-of-the-post
match "/posts/:year/:month/:slug", :to => "posts#show", :as => :post,
  :constraints => { :year => /\d{4}/, :month => /\d{1,2}/, :slug => /[a-z0-9\-]+/ }

Así que debería trabajar con params enindex acción y acaba de obtener puesto por babosa enshow acción (verificar si la fecha es correcta es una opción):

# GET /posts?page=1
def index
  #render :text => "posts#index<br/><br/>#{params.to_s}"
  @posts = Post.order('created_at DESC').page(params[:page])
  # sould be more complicated in future
end

# GET /posts/2012/07/19/slug
def show
  #render :text => "posts#show<br/><br/>#{params.to_s}"
  @post = Post.find_by_slug(params[:slug])
end

También tengo que poner en práctica.to_param para mi modelo:

def to_param
  "#{created_at.year}/#{created_at.month}/#{slug}"
end

Esto es todo lo que he aprendido de toda la noche buscando en api / guías / SO.

Pero el problema escosas extrañas siguen sucediendo para mí como nuevo en rieles:

Cuando voy alocalhost/, la aplicación se rompe y dice que había invocadoshow acción pero el primer objeto en la base de datos se recibió como: año (sic!):

No route matches {:controller=>"posts", :action=>"show", :year=>#<Post id: 12, slug: "*", title: "*", content: "*", created_at: "2012-07-19 15:25:38", updated_at: "2012-07-19 15:25:38">}

Cuando voy alocalhost/posts/2012/07/cut-test Lo mismo sucede:

No route matches {:controller=>"posts", :action=>"show", :year=>#<Post id: 12, slug: "*", title: "*", content: "*", created_at: "2012-07-19 15:25:38", updated_at: "2012-07-19 15:25:38">}

Siento que hay algo muy fácil que no he hecho, pero no puedo encontrar lo que es.

De todos modos, esta publicación será útil cuando se resuelva, porque hay soluciones solo para las babosas en url sin fecha y preguntas similares pero no útiles.

Respuestas a la pregunta(2)

Su respuesta a la pregunta