Freqüentemente, preciso verificar se algum valor está em branco e escrever "Sem dados presentes" assim:
@user.address.blank? ? "We don't know user's address" : @user.address
E quando temos cerca de 20-30 campos que precisamos processar dessa forma, fica feio.
O que fiz é uma classe String estendida com 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")
Agora está parecendo melhor. Mas ainda é cru e áspero
Como seria melhor resolver meu problema. Talvez seja melhor estender ActiveSupport class
ou usar o método auxiliar ou mixins ou qualquer outra coisa. O que a idealogia do Ruby, sua experiência e melhores práticas podem me dizer.
ruby-on-rails
ruby
fl00r
fonte
fonte
Phrogz meio que me deu a ideia no comentário de PofMagicfingers, mas que tal substituir | em vez de?
fonte
Já que você está fazendo isso em Ruby on Rails, parece que você está trabalhando com um modelo. Se você quiser um valor padrão razoável em todo o seu aplicativo, poderá (por exemplo) substituir o
address
método para o seuUser
modelo.Não conheço ActiveRecord bem o suficiente para fornecer um bom código para isso; no Sequel seria algo como:
... mas para o exemplo acima, parece que você estaria misturando a lógica de visualização em seu modelo, o que não é uma boa ideia.
fonte
Seu método ou pode ter alguns efeitos colaterais indesejados, uma vez que o valor alternativo (padrão) é sempre avaliado, mesmo se a string não estiver vazia.
Por exemplo
daria trabalho extra mesmo se o endereço não estivesse vazio. Talvez você possa atualizar isso um pouco (desculpe por ter confundido uma linha, tentando ser breve):
fonte
a=2 ; a == 2 ? "ok" : @b = 3 ; @b; #=> nil
Provavelmente, é melhor estender ActiveRecord ou modelos individuais em vez de String.
Em sua opinião, você pode preferir um padrão mais explícito, como
fonte
Rubi:
RoR:
fonte