2010-06-04 6 views
0

Y a-t-il une chance que les 2e et 3e lignes puissent être combinées en une seule ligne et, espérons-le, en conserver une précieuse?ruby ​​one-liner pour cela possible?

def self.date_format 
    record = find_by_key('strftime') 
    record ? record.value : "%Y-%b-%d' 
end 

la fonction ci-dessus dans un modèle Config essayer de chercher un enregistrement de base de données par une clé, un retour par défaut si elle est introuvable dans la base de données.

Encore mieux si peut être écrit dans une portée nommée. Merci

Répondre

4

Comme demandé.

Personne n'a encore parlé try, ce qui est parfait pour cette situation:

value = find_by_key('strftime').try(:value) || "%Y-%b-%d"

+1

Bien que 'try 'ne soit pas défini dans ruby, vous devez ajouter' require' active-support'' –

+0

est marqué avec 'named-scope' et' activemodel' donc a été supposé. – x1a4

0

Est-ce que

value = find_by_key('strftime') || "%Y-%b-%d" 

travail pour vous?

+0

Désolé, le retour doit être 'reocrd.value', pas l'enregistrement – ohho

+1

il manque l'appel' .value', mais vous pouvez le changer en 'find_by_key ('strftime'). Try (: value) || "% Y-% b-% d" 'pour garder une ligne assez facilement. – x1a4

+0

@Horace: droit, désolé, mal lu le code. –

0

Avez-vous besoin d'attribuer une variable "valeur"? Si non ...

def self.date_format 
    find_by_key('strftime') || "%Y-%b-%d" 
end 
1

Vous pouvez utiliser:

(find_by_key('strftime').value rescue nil) || "%Y-%b-%d" 

si l'utilisation des exceptions ne sont pas très efficaces.

Questions connexes