2010-06-28 11 views
2

Je souhaite afficher un lien de face avant lorsque je clique sur un élément lorsqu'une condition particulière est satisfaite. Je ne veux pas que l'utilisateur clique si la condition n'est pas satisfaite. que je fais quelque chose comme ça pour y parvenir qui est assez laidRails: lien Facebox si la condition est remplie

<% if x == 5 %> 
    <a id="something" href="http://www.some_weird_link.com" rel="facebox"> 
<% end %> 
<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 

<% if x == 5 %> 
    </a> 
<% end %> 

Notez que je dois mettre si la condition juste pour que le </a> ne vient pas dans mon code HTML lorsque la condition est pas satisfaite. Cela a l'air mauvais. Pouvez-vous me suggérer une meilleure façon de faire cela?

link_to_iflink_to_if est prometteur mais alors il veut que je mette le texte d'affichage du lien dans le paramètre qui se trouve être un grand <div> dans mon cas.

Répondre

4

J'ai essayé quelques cas différents, et cela fonctionne (ne sera pas un lien si vous passez l'option: si => false, va créer le lien si vous passez: if => true, ou si vous ne passez pas si l'option du tout)

Définir l'aide:

def facebox(*args , &block) 
    if !args.last.is_a?(Hash) || args.last.fetch(:if,true) 
     link_to *args , &block 
    else 
     block.call 
    end 
    end 

une fois que vous avez cette aide, chaque fois que vous voulez utiliser votre méthode de lien facebox (que vous pourriez aussi bien étoffe avec tout t il des arguments FaceBox spéciaux - que rel, par exemple, pourraient probablement être déplacés dans l'aide pour nettoyer votre point de vue)

Ensuite, vous pouvez le faire à votre avis:

<% facebox 'http://www.some_weird_link.com' , :id => 'something' , :rel => 'facebox' , :if => (x == 5) do %> 
    <div> 
     <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
    </div> 
    <% end %> 
+0

Merci beaucoup Joshua .... C'est vraiment bon .. Voir est si propre. – Garfield

+0

c'est un extrait de code vraiment cool. Merci Joshua – sameera207

1

Essayez

<%= "<a id='something' href='http://www.some_weird_link.com' rel='facebox'>" if x == 5 %> 
<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 


<%= " </a> " if x == 5 %> 
+0

Merci ... C'est mieux que ce que j'ai. Mais je veux me débarrasser de la double ifs .. – Garfield

0

Si je comprends bien votre question correctement cela devrait faire l'affaire:

<%= ((x == 5) ? (link_to 'facebook', 'http://www.some_weird_link.com', :id => 'abc', :rel => 'facebox') : '') %> 

<div> 
    <!-- Loads of HTML and erb code here which should be shown no matter what condition --> 
</div> 
+0

Hey Sameera ... Merci pour la réponse. Le problème est que le link_to text ('facebook' dans votre réponse) est en fait un gros

....
qui avait du contenu html + erb. Donc, je ne pouvais pas utiliser quelque chose comme ça. Appréciez votre aide :) Merci! – Garfield

+0

Salut, Ensuite, essayez quelque chose comme ça, créer une méthode d'assistance def my_link fin Ex: def my_link "

Ceci est un grand texte et il a une longue chaîne, mais il fonctionne comme un lien aussi si vous cliquez sur » + here + «

» fin et appeler comme ça <% = ((x == 5)? (my_link: '')%> L'idée ici est d'ajouter votre complexité à l'aide acclamations sameera – sameera207

+0

Veuillez toujours vérifier la fenêtre d'aperçu avant de soumettre un message - ce code était pour la plupart invisible aux lecteurs. – halfer