Ruby 中对 Tenerary 的简单 if 语句
Simply if statement to a Tenerary in Ruby
我是 Rails 的新手,想知道以下问题:
有没有办法进一步简化这个?
animal = Animal.find_by(name:name, type:type)
if !animal
animal = Animal.create(name:name, type:type)
我正在考虑使用三元表达式,但我想知道如何在不重复代码的情况下编写它,或者这是否是正确的做法。
animal = Animal.find_by(name:name, type:type) ? Animal.find_by(name:name, type:type) : Animal.create(name:name, type:type);
animal = Animal.find_or_create_by(name: name, type: type)
在您的特定情况下, 是更好的答案。但是,我想提供一个干净的解决方案来解决您目前拥有的问题。
Ruby 允许内联 modifier-if/unless 语句。这看起来像这样:
animal = Animal.find_by(name: name, type: type)
animal = Animal.create(name: name, type: type) unless animal
您也可以在这里使用 ||=
运算符(这是我的偏好)。如果变量当前持有假值(nil
或 false
),此运算符仅将正确的值分配给变量。
animal = Animal.find_by(name: name, type: type)
animal ||= Animal.create(name: name, type: type)
# or if you prefer the longer one-liner
animal = Animal.find_by(name: name, type: type) || Animal.create(name: name, type: type)
还有一个变体:
animal = Animal.find_by(name:name, type:type) || Animal.create(name:name, type:type)
我是 Rails 的新手,想知道以下问题:
有没有办法进一步简化这个?
animal = Animal.find_by(name:name, type:type)
if !animal
animal = Animal.create(name:name, type:type)
我正在考虑使用三元表达式,但我想知道如何在不重复代码的情况下编写它,或者这是否是正确的做法。
animal = Animal.find_by(name:name, type:type) ? Animal.find_by(name:name, type:type) : Animal.create(name:name, type:type);
animal = Animal.find_or_create_by(name: name, type: type)
在您的特定情况下,
Ruby 允许内联 modifier-if/unless 语句。这看起来像这样:
animal = Animal.find_by(name: name, type: type)
animal = Animal.create(name: name, type: type) unless animal
您也可以在这里使用 ||=
运算符(这是我的偏好)。如果变量当前持有假值(nil
或 false
),此运算符仅将正确的值分配给变量。
animal = Animal.find_by(name: name, type: type)
animal ||= Animal.create(name: name, type: type)
# or if you prefer the longer one-liner
animal = Animal.find_by(name: name, type: type) || Animal.create(name: name, type: type)
还有一个变体:
animal = Animal.find_by(name:name, type:type) || Animal.create(name:name, type:type)