Лучшее тройное состояние - PullRequest
0 голосов
/ 07 января 2019

Метод find_something может вернуть nil. В следующем коде

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

find_something(id) вызывается дважды. Это запах, которого я хочу избежать. Есть ли способ избежать избыточности в этом выражении?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Недостаточно подробностей, чтобы сказать это с уверенностью, хотя, возможно, это относится к 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

Надеюсь, это полезно - дайте мне знать, подходит ли оно для вашего варианта использования.

0 голосов
/ 07 января 2019

Что-нибудь подобное?

something = find_something(id) || create_something(foo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...