Какой самый простой способ кодировать метод Ruby с условием if / then / else? - PullRequest
1 голос
/ 26 июля 2011

У меня есть этот метод уровня класса в классе модели ActiveRecord.

def self.is_animal_color_correct?(animal, color)
  if AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
    true
  else
    false
  end
end

Мне просто интересно, как лучше всего отформатировать метод. Это кажется многословным, но очень ясным.

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

В этом конкретном примере, я думаю, это то, что вы хотите вместо:

AnimalColor.exists?(:animal => animal.downcase, :color => color.downcase) 

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

4 голосов
/ 26 июля 2011
def self.is_animal_color_correct?(animal, color)
  AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
end

В Ruby идиотично использовать nil и false в качестве неверных значений и реальных значений (при их наличии) для истинных.С вашим if/else вы активно отбрасываете информацию, которая может быть полезна где-то еще, и делаете больше работы в процессе.

Если вы действительно действительно хотите, чтобы ваш метод возвращал только true или falseВы могли бы:

def self.is_animal_color_correct?(animal, color)
  !!AnimalColor.find_by_animal_and_color(animal.downcase, color.downcase) 
end

Но, опять же, это не идиоматичный Ruby, и я не рекомендую его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...