2012-04-24 11 views
7

Tengo un bloque complejo de etiquetas (<h3>, <p>, ...) que quiero mostrar con un enlace o sin un enlace a su alrededor en función de una condición.Rieles: ¿Cómo puedo mostrar un bloque con o sin un enlace basado en una condición (link_to_if)

que sé sobre link_to_if que funciona así:

<% link_to_if condition, name, path %> 

si la condición es false se prestarán únicamente el nombre.

y sé quién es el link_to con &block:

<% link_to path do %> 
    [complex content] 
<% end %> 

Quiero una combinación de ambos. Una instrucción link_to_if que acepta un &block, de modo que el bloque se representará sin un vínculo a su alrededor, si la condición es false. Por desgracia, la declaración link_to_if con un &block no funciona como la declaración link_to :(

¿Alguien tiene sugerencias para mí Cualquier ayuda es muy apreciada

Respuesta

23

escribí mi propio ayudante para esto:?

def link_to_if_with_block condition, options, html_options={}, &block 
    if condition 
     link_to options, html_options, &block 
    else 
     capture &block 
    end 
    end 

Puede usarlo así:

<%= link_to_if_with_block true, new_model_path { "test" } %> 
<%= link_to_if_with_block true, new_model_path do %> 
    Something more complicated 
<% end %> 
+0

Creo que me gusta eso. – DiegoFrings

+0

Simplemente no sé cómo funciona con pasar todos los diferentes argumentos a 'link_to', pero supongo que cuando necesites algo más sofisticado lo descubrirás;) – klump

+0

Hmmm. Algo es extraño con su método de ayuda. Si uso el Helper con '<%= %>', el bloque se representará una vez (con un enlace) si la condición es verdadera, pero dos veces (sin un enlace) si la condición es falsa :( – DiegoFrings

3

Acabo de sobrescribir el método incorporado causa el uso de bloques que ofrecen realmente no tiene mucho sentido para nuestro uso. Solo agrégalo a un helper y esto hará que link_to_if funcione igual que link_to.

def link_to_if(*args,&block) 
    args.insert 1, capture(&block) if block_given? 

    super *args 
end 
Cuestiones relacionadas