A menudo necesito verificar si algún valor está en blanco y escribir que "No hay datos presentes" así:
@user.address.blank? ? "We don't know user's address" : @user.address
Y cuando tenemos entre 20 y 30 campos que necesitamos procesar de esta manera, se vuelve feo.
Lo que hice es una clase String extendida con or
método
class String
def or(what)
self.strip.blank? ? what : self
end
end
@user.address.or("We don't know user's address")
Ahora se ve mejor. Pero todavía es crudo y áspero
Cómo sería mejor resolver mi problema. Tal vez sería mejor extender ActiveSupport class
o usar el método auxiliar o mixins o cualquier otra cosa. Lo que ruby idealogy, su experiencia y sus mejores prácticas me pueden decir.
ruby-on-rails
ruby
fl00r
fuente
fuente
Phrogz me dio la idea en el comentario de PofMagicfingers, pero ¿qué pasa con anular | ¿en lugar?
fuente
Como está haciendo esto en Ruby on Rails, parece que está trabajando con un modelo. Si quisiera un valor predeterminado razonable en todas partes de su aplicación, podría (por ejemplo) anular el
address
método para suUser
modelo.No conozco ActiveRecord lo suficientemente bien como para proporcionar un buen código para esto; en Sequel sería algo como:
... pero para el ejemplo anterior, parece que estaría mezclando la lógica de vista en su modelo, lo cual no es una buena idea.
fuente
Su método o puede tener algunos efectos secundarios no deseados, ya que el valor alternativo (predeterminado) siempre se evalúa, incluso si la cadena no está vacía.
Por ejemplo
haría un trabajo extra incluso si la dirección no está vacía. Tal vez puedas actualizar eso un poco (perdón por confundir una línea, tratando de ser breve):
fuente
a=2 ; a == 2 ? "ok" : @b = 3 ; @b; #=> nil
Probablemente sea mejor extender ActiveRecord o modelos individuales en lugar de String.
En su opinión, es posible que prefiera un patrón más explícito como
fuente
Rubí:
RoR:
fuente