Rails 3.2-freundliches URL-Routing nach Datum

Ich möchte eine Blog \ News-Anwendung mit folgenden Funktionen implementieren:

zeige alle Beiträge bei root:example.com/Zeige alle Beiträge, die auf ein Jahr antworten:example.com/2012/Zeige alle Beiträge, die auf ein Jahr und einen Monat antworten:example.com/2012/07/zeige einen Beitrag nach Datum und Schnecke:example.com/2012/07/slug-of-the-post

Also habe ich ein Modell für erstelltroutes.rb Datei:

# 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\-]+/ }

Also sollte ich mit params in arbeitenindex Action und einfach per Slug-In postenshow Aktion (Prüfen, ob das Datum korrekt ist, ist eine Option):

# 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

Auch muss ich umsetzento_param für mein modell:

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

Das ist alles, was ich aus der nächtlichen Suche in api / guides / SO gelernt habe.

Aber das Problem istseltsame Dinge passieren immer wieder für mich wie neu auf Schienen:

Wenn ich gehelocalhost/Die App bricht ab und sagt, dass sie aufgerufen hatteshow Aktion, aber das erste Objekt in der Datenbank wurde empfangen als: Jahr (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">}

Wenn ich gehelocalhost/posts/2012/07/cut-test das gleiche passiert:

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">}

Ich habe das Gefühl, dass es etwas sehr Leichtes gibt, das ich nicht gemacht habe, aber ich kann nicht finden, was es ist.

Auf jeden Fall wird dieser Beitrag hilfreich sein, wenn er gelöst ist, da es nur Lösungen für URLs ohne Datum und ähnliche, aber nicht nützliche Fragen gibt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage