Domanda

Sto cercando di fare qualcosa di simile una lumaca wordpress dove ho un URL come questo, pur mantenendo il routing RESTful:

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

Il motivo Sono interessato a mantenere il routing RESTFUL è che io sono in grado di utilizzare molti plugin perché sto usando percorsi personalizzati.

ho già fatto la comparsa riposante con:

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 => /.+/ }

Per scrivere i collegamenti, ho dovuto scrivere personalizzato link_to aiutanti per generare gli URL corretto. Mi piacerebbe davvero fare questa RESTful e hanno il post_path link_to (@post) cedere l'URL di cui sopra e l'edit_post_path link_to (@post) ... Articolo-titolo / modifica

ho anche: has_many => [: Commenti] e vorrei che a lavorare pure. Il link_to che ho provato è simile al seguente:

 '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 %>

e produce questo (che non è quello che voglio):

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

Non sono sicuro di quello che sto facendo male. E 'anche possibile per raggiungere questo obiettivo?

È stato utile?

Soluzione

Credo che non funziona perché non si sta usando un percorso personalizzato. Lo faccio tutto il tempo. Ho semplicemente impostare un semplice percorso personalizzato:

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

Poi si dovrebbe essere in grado di fare:

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

Il motivo che stai ricevendo una stringa di query è più probabile perché le rotaie non sta facendo il collegamento con il percorso per qualsiasi motivo. Utilizzo di un percorso di nome in modo esplicito dice a rotaie per utilizzare il percorso. Fatemi sapere se questo risolve per voi!

Altri suggerimenti

Ecco come sono andato su questo ...

Per prima cosa, non sto cercando di utilizzare il metodo URL percorso generati. Inoltre, non ho intenzione nella stessa misura, come si verifica in termini di formattazione dei parametri di data. Dal momento che sono auto-generare i datestamps e la creazione URL, io non sono preoccupato per formato di validità, sto semplicemente la formattazione di un oggetto ActiveSupport :: TimeWithZone.

Cominciamo con il percorso relativo:

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

Dal momento che non ho voglia di preoccuparsi di formattazione argomento, o la ripetizione, ho creato un metodo di supporto e incluso l'aiutante nel controller relativo:

  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

Infine, a mio avviso, ho semplicemente chiamare il metodo, passando il mio oggetto del messaggio:

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

io alla fine con un URL del tipo: http://wallscorp.us/content / 2009/12/06 / link

Saluti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top