编写if语句的更简单方法:在方法中传递1或2个参数

时间:2019-01-30 12:23:47

标签: ruby-on-rails parameter-passing

我想知道下面是否有更短/更简单的代码编写方式。

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 :(得分:1)

我建议像这样

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)

这将为您提供两个关系,无需其他查询即可选择。