2012-04-24 10 views
7

Mam złożony blok znaczników (<h3>, <p>, ...), który chcę renderować za pomocą łącza lub bez link wokół niego na podstawie warunku.Szyny: Jak wyświetlić blok z łączem lub bez niego na podstawie warunku (link_to_if)?

wiem o link_to_if, który działa tak:

<% link_to_if condition, name, path %> 

jeśli warunek jest false tylko nazwa zostanie wygenerowana.

I wiem o link_to z &block:

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

Chcę kombinacji obu. Instrukcja link_to_if, która akceptuje wartość &block, aby blok został wyrenderowany bez powiązania z nim, jeśli warunkiem jest false. Niestety oświadczenie link_to_if z &block nie działa jak oświadczenie :(link_to

Czy ktoś ma propozycję dla mnie Każda pomoc jest bardzo ceniona

Odpowiedz

23

pisałem własne pomocnika na to:?

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

Możesz go użyć w następujący sposób:

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

Myślę, że to lubię. – DiegoFrings

+0

Po prostu nie wiem, jak to działa z przekazaniem wszystkich różnych argumentów do 'link_to', ale myślę, że kiedy potrzebujesz czegoś bardziej wyrafinowanego, wymyślisz to;) – klump

+0

Hmmm. Coś jest dziwnego w twojej metodzie pomocnika. Jeśli użyję pomocy z '<%= %>' blok zostanie wyrenderowany jeden raz (z łączem dookoła niego), jeśli warunek jest prawdziwy, ale dwa razy (bez linku), jeśli warunek jest fałszywy :( – DiegoFrings

3

Właśnie nadpisałem metodę wbudowaną korzystanie z bloku, które oferują, nie ma większego sensu w naszym użytkowaniu. Po prostu dodaj go do helpera, a to sprawi, że link_to_if będzie działał podobnie jak link_to.

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

    super *args 
end 
Powiązane problemy