2010-08-04 12 views
1

J'ai Ruby on Rails app où je fais ce qui suit:Les meilleures pratiques pour l'affichage des données de l'utilisateur peut ne pas avoir

@user = User.find(:first, :conditions => ['LOWER(username) = ?', current_subdomain.downcase], :include => :bio) 

Où: include =>: bio "est la partie importante.

Puis dans la vue je veux afficher une bio:

<em><%= @user.bio.title %></em><br /> 
<%= @user.bio.city %><br /> 
<%= @user.bio.state %><br /> 
<%= @user.bio.country %> 

Mais si l'utilisateur dosn't avoir des informations juste se retrouvera quelques lignes vides.

J'ai essayé deux choses différentes, aucun d'eux n'a fonctionné jusqu'à présent ...

<% if @user.bio.title %> # is always true 
<% if @user.bio.title > 0 %> # triggers an error if @user.bio.title isn't set 
<% unless @user.bio.title.empty? %> # same as above 

Toute sollution à la façon d'afficher uniquement les données que l'utilisateur a obtenu?

Merci d'avance!

MISE À JOUR

Ok, si compris certaines choses:

<% if @user.bio.title %> # Works if the bio isn't set at all. 
<% if @user.bio.title > 0 %> # Works if the bio is set. 

Je peux donc utiliser une sollution qui ressemble à:

<% if @user.bio.title %><% if @user.bio.title > '0' %><%= @user.bio.title %><% end %><% end %> 

Mais couture un peu exagéré? De meilleures suggestions?

Merci!

Répondre

3

Voici une façon d'y réfléchir. L'utilisateur a une bio et a rempli le champ de titre. Dans Ruby:

<% if @user.bio && [email protected]? %> 

Si vous allez afficher plusieurs champs de la bio vous pouvez séparer cela en 2 chèques par exemple

<% if @user.bio %> 
    <% unless @user.bio.title.blank? %> 
    Title: <%= @user.bio.title %> 
    <% end %> 
    <% unless @user.bio.other_field.blank? %> 
    Other field: <%= @user.bio.other_field %> 
    <% end %> 
<% end %> 

Alternative

Une autre façon est de mettre les méthodes sur votre modèle pour fournir un accès direct aux champs bio. par exemple.

# return the user's title or nil if no bio 
def title 
    bio.title if bio 
end 

Alors, selon vous, vous pouvez juste faire:

<% unless @user.title.blank? %> 
    Title: <%= @user.title %> 
<% end %> 
+0

Cela fonctionne! Mieux que le dubble si c'est sûr, merci! – Alfred

+0

J'aime l'alternative ici, tirer le code de la vue dans un code de modèle. –

0

Pouvez-vous essayer cela?

if defined?(@user.bio.title) 
+0

Seams pour revenir toujours faux quand je l'ai essayé rapidement maintenant: <% si elle est définie (@ user.bio.title)%?><% = @ User.bio.title%><% end %> – Alfred