2016-05-25 1 views
0

Parfois, dans mes vues Rails, j'ai du code dupliqué, car je dois définir les paramètres d'une méthode d'assistance Rails en fonction de certaines conditions. Comme:Méthodes d'assistance Rails avec paramètres conditionnels

<% if something %> 
    <%= link_to "Target", @target, class: "target-a" %> 
<% else %> 
    <%= link_to "Target", @target, class: "target-b" %> 
<% end %> 

ou un autre exemple:

<% if tooltip == false %> 
    <%= image_tag picture.url(size), class: "img-responsive #{css_class}" %> 
<% else %> 
    <%= image_tag picture.url(size), class: "img-responsive #{css_class}", data: { toggle: "tooltip", placement: "bottom" }, title: "#{picture.name}" %> 
<% end %> 

Y at-il une façon d'écrire cela dans une plus élégante façon (sans répéter l'assistant entier)?

Merci

Répondre

0

Vous pouvez isoler les différences dans les options hachage et fusionner seulement les différences dans une des options de base commune hachage:

<% 
    link_options = 
    if something 
     {} 
    else 
     { data: { toggle: "tooltip", placement: "bottom" }, title: "#{picture.name}" } 
    end 
%> 
<%= image_tag picture.url(size), 
       link_options.merge(class: "img-responsive #{css_class}") %> 

Ou, mieux encore, vous pourriez faire la même chose mais dans votre propre méthode d'assistance personnalisée. L'utilisation d'une méthode d'assistance est préférable car vous disposez alors d'une méthode qui peut être testée, réutilisée, nommée (d'une manière auto-documentée), etc.

+0

Oh .. hash merge. plus facile que pensé :-) Merci beaucoup! –