8 Stimmen

Geländer: Wie kann ich einen Block mit oder ohne einen Link basierend auf einer Bedingung (link_to_if) anzeigen

Ich habe einen komplexen Block von Tags ( <h3> , <p> , ...), die ich mit einem Link oder ohne einen Link um sie herum basierend auf einer Bedingung darstellen möchte.

Ich weiß von link_to_if das so funktioniert:

<% link_to_if condition, name, path %>

wenn die Bedingung lautet false wird nur der Name wiedergegeben.

Und ich weiß von der link_to con &block :

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

Ich möchte eine Kombination aus beidem. A link_to_if Anweisung, die eine &block so dass der Block ohne einen Link um ihn herum gerendert wird, wenn die Bedingung false . Leider ist die link_to_if Anweisung mit einer &block funktioniert nicht wie die link_to Aussage :(

Hat jemand einen Vorschlag für mich? Jede Hilfe wird sehr geschätzt

23voto

klump Punkte 3241

Dafür habe ich ein eigenes Hilfsmittel geschrieben:

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

Sie können ihn wie folgt verwenden:

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

4voto

Paul Alexander Punkte 31302

Ich habe die eingebaute Methode einfach überschrieben, weil die von ihnen angebotene Blockverwendung für unsere Zwecke wirklich nicht viel Sinn macht. Fügen Sie es einfach zu einem Helfer und dies wird link_to_if Arbeit genau wie link_to machen.

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

  super *args
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X