2011-06-30 14 views
5

Tengo este¿Cómo hacer personalizado _url helper en Rails 3?

match '/news/:year/:id' => 'news#show', :as => :news 

quiero usar:

<%= link_to n.title, n %> 

(que devuelve /news/n.id/current_news.id en lugar de /news/n.date.year/ n.id)

quiero para deshacerse de esto:

<%= link_to n.title, news_url(n, :year => n.date.year) %> 

Cómo hacer eso?

Respuesta

1

Usted puede hacer algo como esto en un archivo de ayuda:

def custom_link_to(*args) 
    name   = args[0] 
    obj   = args[1] 
    if obj.is_a?(News) # or whatever class you are using 
    link_to(name, news_url(obj, :year => obj.date.year)) 
    else 
    link_to(args) 
    end 
end 

A continuación, en su opinión:

<%= custom_link_to n.title, n %> 

O bien, podría reemplazar el método link_to ayudante con un poco de código similar. Preferiría el método custom_link_to porque presenta menos posibilidades de atornillar otras llamadas link_to. Pero si lo haces bien, sin dudas podrías salirte con la tuya.

5

Puede anular el ayudante que genera la trayectoria

añadir algo como esto al módulo NewsHelper debe hacer el truco:

def news_path(news) 
    "/news/#{news.date.year}/#{news.id}" 
end 

continuación <%= link_to n.title, n %> le dará la dirección URL que desea para objetos de noticias

+3

Es un enfoque válido en este caso especial, pero no es comprobable y no se extiende a lugares donde se utilizan asistentes de URL inyectando directamente las rutas de los raíles ayudantes – bbozo

Cuestiones relacionadas