2010-05-14 6 views
0

J'utilise le code:message Visualiser si aucune photo présente

<%= image_tag site.photo.url(:small) if site.photo.file? %> 

dire à mon application pour afficher rien s'il n'y a pas photo associée à un poste particulier (site dans ce cas). Y at-il un moyen de rendre un message le long de w/this. Par exemple "pas d'image avec le post". J'ai essayé simplement de faire

<%= if site.photo.file? %> 
    <p> no image with this site </p> 
<% end %> 

Mais cela ne semble pas fonctionner. Nouveau à ruby ​​et rails si vous ne pouvez pas dire.

+0

Je ne suis pas au courant de rails, mais ne serait pas si site.photo.file? retourner vrai s'il y avait une photo? Ne voudriez-vous pas le contraire de cela? – Beanish

+0

Oui, vous avez raison, je pense que cela est adressé par le .empty? ou .blank? plus à la fin mais je pense qu'il y a un moyen de le faire dans le premier ensemble de code en utilisant peut-être l'instruction 'else' mais pas sûr de la syntaxe ici. – bgadoci

Répondre

1
<%= image_tag(site.photo.url(:small)) rescue "<p>No image</p>" %> 
+0

Je pensais que vous ne pouviez utiliser le sauvetage qu'avec Begin, comment cela fonctionne-t-il? – Schneems

+0

C'est un "sauvetage en ligne". Si le côté gauche de l'expression déclenche une erreur, elle peut être récupérée immédiatement avec l'instruction sur la droite. Par exemple, dans l'exemple ci-dessus, si 'site' n'a pas de' photo', 'site.photo.url' va se plaindre de" méthode non définie 'url 'pour' nil' ". Plutôt que de faire des tests pour cela, il suffit de sauver et de rendre "Whoa! Pas de photo, mec." –

2

Une façon simple réelle serait de créer une petite petite aide:

def show_photo_if_exists(photo) 
    photo.file? ? image_tag photo.url(:small) : "No image with this site" 
end 

Ensuite, dans votre appel Vue:

<%= show_photo_if_exists(site.photo) %> 
+0

si 'site.photo' est nul, vous passez la méthode' show_photo_if_exists'. La première déclaration de cette méthode devient 'nil.file? 'Dont retournera un' méthode indéfinie \ 'fichier?' pour néant: NilClass'. –

+0

Il me semble qu'il utilise Paperclip, auquel cas tant que le modèle Site 'has_attached_file: photo' puis' site.photo' ne sera jamais nul, même s'il n'a pas de pièce jointe. – aaronrussell

1

Vous êtes sur la bonne voie, mais il manque un peu de logique que vous voulez afficher seulement si site.photo.file? retourne false, vous devez utiliser dans votre vue: (!?. noter le coup devant site.photo.file qui inversent la logique)

<%= if !site.photo.file? %> 
    <p> no image with this site </p> 
<% end %> 

+0

un simple point d'exclamation et ça devrait marcher! – jigfox

+0

Ce n'est pas idiomatique rubis. Ruby a un mot-clé "si non" 'sauf si '. '<% sauf site.photo.file? %> ... '** Note: **, vous voulez' <% ... ', pas' <% = ... '. –

4

Votre code sortie no image with this site lorsqu'il y a une photo. Utilisez ceci:

<% unless site.photo.file? %> 
    <p> no image with this site </p> 
<% end %> 

ou mieux encore:

<% if site.photo.file? %> 
    <%= image_tag site.photo.url(:small) %> 
<% else %> 
    <p> no image with this site </p> 
<% end %> 
+0

'<%= ... %>' sorties vers le document. Écrivez la logique d'affichage comme (par exemple,) '<% sauf site.photo.file? %> ... '(Non' = 'caractère) –

+0

merci pour cette info, c'est corrigé maintenant – jigfox

Questions connexes