Более простой способ написать оператор if: передача 1 или 2 параметров в метод - PullRequest
0 голосов
/ 30 января 2019

Мне было интересно, есть ли более короткий / простой способ написать код ниже.

if statement
  result = model.find_by(key => row[key.to_s])
else
  result = model.find_by(key => row[key.to_s], secondkey => row[secondkey.to_s])
end

Я думал о чем-то вроде этого:

args = {key => row[key.to_s]}
result = model.find_by(args)

Но я незнаю, как это сделать.

Редактировать:

Спасибо за ваши ответы!И как мне написать это, если ситуация ниже?Мне нравится ставить args = {key => row[key.to_s]} перед циклом, я стараюсь не проверять оператор каждый раз.

statement = true

rows.each do |row|

  if statement
    result = model.find_by(key => row[key.to_s])
  else
    result = model.find_by(key => row[key.to_s], secondkey => row[secondkey.to_s])
  end

  # more code
end

1 Ответ

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

Я предлагаю что-то вроде этого

args = { key: row[key.to_s] }
args.merge!({ secondkey: row[secondkey.to_s] }) if statement
result = model.find_by(args)

Чтобы избежать запросов в каждом цикле, вы, возможно, можете сделать что-то вроде:

statement = true
first_condition = row.map { |h| h[: key] }
second_condition = row.map { |h| h[:secondkey] }
result1 = model.where(key: first_condition)
result2 = model.where(key: first_condition, secondkey: second_condition)

Это даст вам два отношения для работы без дополнительныхзапросы на выбор.

...