Souvent, je dois vérifier si une valeur est vide et écrire que "Aucune donnée présente" comme ça:
@user.address.blank? ? "We don't know user's address" : @user.address
Et quand nous avons environ 20-30 champs que nous devons traiter de cette manière, cela devient moche.
Ce que j'ai fait est une classe String étendue avec une or
méthode
class String
def or(what)
self.strip.blank? ? what : self
end
end
@user.address.or("We don't know user's address")
Maintenant, ça va mieux. Mais c'est toujours brut et rugueux
Comment il serait préférable de résoudre mon problème. Il serait peut-être préférable d'étendre ActiveSupport class
ou d'utiliser une méthode d'assistance ou des mixins ou autre chose. Ce que l'idealogy ruby, votre expérience et vos meilleures pratiques peuvent me dire.
ruby-on-rails
ruby
fl00r
la source
la source
Phrogz m'a en quelque sorte donné l'idée dans le commentaire de PofMagicfingers, mais qu'en est-il du dépassement | au lieu?
la source
Puisque vous faites cela dans Ruby on Rails, il semble que vous travaillez avec un modèle. Si vous souhaitez une valeur par défaut raisonnable partout dans votre application, vous pouvez (par exemple) remplacer la
address
méthode de votreUser
modèle.Je ne connais pas assez bien ActiveRecord pour fournir un bon code pour cela; dans Sequel, ce serait quelque chose comme:
... mais pour l'exemple ci-dessus, il semble que vous mélangiez la logique de vue dans votre modèle, ce qui n'est pas une bonne idée.
la source
Votre méthode ou peut avoir des effets secondaires indésirables, car la valeur alternative (par défaut) est toujours évaluée, même si la chaîne n'est pas vide.
Par exemple
ferait un travail supplémentaire même si l'adresse n'est pas vide. Vous pourriez peut-être mettre à jour cela un peu (désolé de confondre one-liner, en essayant de rester bref):
la source
a=2 ; a == 2 ? "ok" : @b = 3 ; @b; #=> nil
Il est probablement préférable d'étendre ActiveRecord ou des modèles individuels au lieu de String.
À votre avis, vous préférerez peut-être un modèle plus explicite comme
la source
Rubis:
RoR:
la source