我刚接触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)
在您的特定情况下,answer of Mark是更好的答案。但是,我想为您提供目前的解决方案。
Ruby允许使用内联修饰符-if /除非声明。看起来像这样:
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)
仅另一种变化: