Pregunta

Estoy buscando para hacer algo similar una babosa wordpress donde tengo una URL como esta enrutamiento REST manteniendo al mismo tiempo:

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

La razón por la que estoy interesado en mantener el enrutamiento reparador es que soy incapaz de utilizar muchos plugins porque estoy utilizando rutas personalizadas.

Ya he hecho la aparición REST 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 => /.+/ }

Con el fin de escribir los enlaces, que tenía que escribir de encargo link_to ayudantes para generar las direcciones URL adecuadas. Realmente me gustaría hacer esta REST y tienen la post_path link_to (@post) dió la URL anterior y la edit_post_path link_to (@post) ... artículo de título / editar

También tengo: has_many => [: comentarios] y me gustaría que trabajar también. El link_to que he tratado es el siguiente:

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

y produce esto (que no es lo que quiero):

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

No estoy seguro de lo que estoy haciendo mal. ¿Es posible lograr esto?

¿Fue útil?

Solución

Creo que no funciona porque no se está utilizando una ruta personalizada. Lo hago todo el tiempo. Simplemente configurar una sencilla ruta personalizada:

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

A continuación, usted debe ser capaz de hacer:

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

La razón de que está recibiendo una cadena de consulta es más probable porque los carriles no está haciendo la conexión a la ruta por cualquier razón. Usando una ruta denominada explícitamente le dice a los carriles de usar esa ruta. Déjame saber si se soluciona por usted!

Otros consejos

Así es como me fui de esto ...

En primer lugar, no estoy tratando de utilizar el método de URL generada ruta. Además, yo no voy a la misma medida que usted en términos de control de formato de los parámetros de fecha. Desde que estoy auto-generar las marcas de fecha y la creación de URL, no estoy preocupado por formato de validez, estoy simplemente dar formato a un objeto ActiveSupport :: TimeWithZone.

Vamos a empezar con la línea pertinente:

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

Dado que no quería que preocuparse por el formato de discusión, o la repetición, creé un método de ayuda e incluía el ayudante en el tratamiento de datos correspondiente:

  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

Por último, en mi opinión, simplemente llama al método, que pasa en mi objeto de la publicación:

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

termino con una URL como: http://wallscorp.us/content / 2009/12 /, 06 / enlaces

Saludos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top