代码之家  ›  专栏  ›  技术社区  ›  Xero

较好的三元条件

  •  3
  • Xero  · 技术社区  · 6 年前

    方法 find_something 可能返回 nil . 在下面的代码中,

    something = find_something(id) ? find_something(id) : create_something(foo)
    

    find_something(id) 两次呼叫。这是一种我想避免的气味。这个表达式中是否有避免冗余的方法?

    2 回复  |  直到 6 年前
        1
  •  10
  •   Ursus    6 年前

    有这样的吗?

    something = find_something(id) || create_something(foo)
    
        2
  •  6
  •   SRack    6 年前

    没有足够的细节可以自信地说出来,尽管这可能是 find_or_create_by .

    如果这适合,您只需:

    something = YourModel.find_or_create_by(id: id)
    

    您还可以为此提供一个块,如果找不到任何记录,该块将传递给create方法。例如:

    something = YourModel.find_or_create_by(id: id) do |instance|
      # this block only gets executed on create
      instance.some_new_attribute = 'goes here'
    end
    

    希望这是有用的-让我知道它是否适合您的用例。