Frage

Ich suche etwas ähnliches ein Wordpress Slug zu tun, wo ich eine URL wie dieser unter Beibehaltung RESTful Routing habe:

http://foo.com/blog/2009/12/04/article-title

Der Grund, warum ich in keep RESTFUL Routing interessiert bin ist, dass ich nicht in der Lage viele Plugins zu verwenden, weil ich eigene Routen verwenden.

Ich habe bereits die RESTful Aussehen gemacht mit:

map.connect   '/blog/:year/:mon/:day/:slug',
              :controller => 'posts', :action => 'show',
                :year => /\d{4}/, :month => /\d{2}/,
                :day => /\d{2}/, :slug => /.+/,
                :requirements => { :year => /\d{4}/, :month => /\d{2}/, :day => /\d{2}/, :slug => /.+/ }

Um die Links zu schreiben, hatte ich link_to Helfer Gewohnheit zu schreiben, die richtigen URLs zu erzeugen. Ich möchte wirklich diese RESTful machen und die link_to post_path (@post) ergeben die URL oben haben und die link_to edit_post_path (@post) ... Artikel-Titel / bearbeiten

Ich habe auch: has_many => [: Kommentare] und ich würde das auch arbeiten. Die link_to, die ich versucht habe, sieht wie folgt aus:

 'posts', :action => 'show', :year => recent_post.datetime.year.to_s,
            :month => sprintf('%.2d', recent_post.datetime.mon.to_i),
            :day => sprintf('%.2d', recent_post.datetime.mday.to_i),
            :slug => recent_post.slug %>

und ergibt dies (das ist nicht das, was ich will):

http://foo.com/posts/show?day=30&month=11&slug=welcome-to-support-skydivers&year=2009

Ich bin mir nicht sicher, was ich falsch mache. Ist es sogar möglich, dies zu erreichen?

War es hilfreich?

Lösung

Ich denke, es nicht funktioniert, weil Sie nicht eine benutzerdefinierte Route. Ich tue dies die ganze Zeit. Ich habe einfach Setup eine einfache benutzerdefinierte Route:

map.present_page '/blog/:year/:month/:day/:slug',
          :controller => 'posts', :action => 'show'

Dann sollten Sie in der Lage zu tun:

present_page_path(:year => 2009, 
                  :month => "December", 
                  :day => "13", 
                  :slug => "just-an-example")

Der Grund, warum Sie eine Abfragezeichenfolge sind immer ist höchstwahrscheinlich, weil Schienen nicht die Verbindung zu Ihrer Route für welchen Gründen auch immer zu machen. zu verwenden, diesen Weg Tells Schienen explizit eine benannte Route. Lassen Sie mich wissen, ob es das für Sie löst!

Andere Tipps

Hier ist, wie ich über das ging ...

Zuerst Ich versuche nicht, die Route generierte URL-Methode zu verwenden. Auch ich werde nicht in gleichem Maße, wie Sie in Bezug auf die Formatierung der Datumsparameter überprüfen. Da ich auto-Erzeugung bin die Datumsstempel und die URL-Erstellung, ich Format Gültigkeit nicht besorgt bin, bin ich die Formatierung einfach ein Active :: TimeWithZone Objekts.

Lassen Sie sich mit der entsprechenden Route starten:

  map.post_by_date 'content/:year/:month/:day/:slug', 
                  :controller => 'posts',
                  :action     => 'show_by_date_slug'

Da ich nicht über Argument Formatierung beunruhigen wollte, oder Wiederholung, habe ich eine Hilfsmethode und enthalten die Helfer in dem entsprechenden Controller:

  def pubdate_slug_url(post)
    year   = post.published_on.strftime('%Y')
    month  = post.published_on.strftime('%m')
    day    = post.published_on.strftime('%d')

    url    = "/" + ["content", year, month, day, post.slug].join("/")

    return url
  end

Schließlich meiner Meinung nach, ich habe die Methode einfach anrufen, vorbei in meinem Beitrag Objekt:

  <h2><%= link_to post.headline, pubdate_slug_url(post) %></h2>

ich mit einer URL am Ende wie: http://wallscorp.us/content / 2009/12/06 / Links

Prost.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top