Ruby определяет, установлено ли значение в настройке переменной - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть функция generate_username, которая генерирует имя пользователя (очевидно).

Значения fname и lname являются обязательными, поэтому проблем здесь нет. Однако mname НЕ является обязательным полем, поэтому оно может быть пустым, что нарушает этот код.

Любые предложения о том, как попросить ruby ​​напечатать значение mname, только если оно существует или установлено, и игнорировать его, если пользователь оставил его пустым?

def generate_username
  self.username = fname.to_s.split("")[0] + mname.to_s.split("")[0] + lname.to_s
end

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Вбрасывание простого троичного оператора для проверки, является ли значение пустым? должно сработать.

def generate_username
  self.username = fname.to_s.split("")[0] + (mname.blank? ? "" : mname.to_s.split("")[0]) + lname.to_s
end
1 голос
/ 18 апреля 2011

в рубине 1.9

def generate_username
  "#{fname[0]}#{mname.to_s[0]}#{lname}"
end

или

def generate_username
  fname[0]+mname.to_s[0].to_s+lname
end

В ruby ​​1.8 замените все [0] на [0, 1] (этот пункт добавлен после того, как Питер указал).

  • mname.to_s гарантирует, что вы получите строку; когда mname равно nil, это будет пустая строка "".
  • String#[0] подбирает первый символ этой строки; когда строка пуста, она вернет nil.
  • #{ } в пределах " " расширяет код рубина и превращает его в строку; особенно превращает nil в пустую строку "".
1 голос
/ 18 апреля 2011

Вы можете попробовать это (скобки важны):

def generate_username
  self.username = fname.to_s.split("")[0] << (mname.to_s.split("")[0] || "") << lname.to_s
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...