如果在Ruby中仅对Tenerary进行语句声明

问题描述 投票:2回答:3

我刚接触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);
ruby-on-rails ruby ternary
3个回答
5
投票

尝试find_or_create_by

animal = Animal.find_or_create_by(name: name, type: type)

1
投票

在您的特定情况下,answer of Mark是更好的答案。但是,我想为您提供目前的解决方案。

Ruby允许使用内联修饰符-if /除非声明。看起来像这样:

animal = Animal.find_by(name: name, type: type)
animal = Animal.create(name: name, type: type) unless animal

您也可以在这里使用||=运算符(我偏爱它)。仅当变量当前具有伪造的值(nilfalse)时,此运算符才将权利拥有的值分配给该变量。

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)

0
投票

仅另一种变化:

© www.soinside.com 2019 - 2024. All rights reserved.