到 "exists && =="的 Ruby 快捷方式

标签 ruby refactoring

我有这行代码,它根据是否有现有用户定义new_params:

new_params = params[:existing_user] && params[:existing_user] == "1" ?
  existing_user_params(nested_donation_params) :
  nested_donation_params

很长。有没有这样的方法可以让它更短更干净?

e.exists_and_equals("1")

最佳答案

这里有几件事要记住。首先是您可以直接比较:

params[:existing_user] == "1"

如果这是 nil == "1" 那么它无论如何都会返回 false。我首选的处理结构是:

case (params[:existing_user])
when "1"
  existing_user_params(nested_donation_params)
else
  nested_donation_params
end

现在,根据 existing_user_params 的内容,您可能有一种方法可以进一步简化它。例如,如果 existing_user_params 是辅助方法:

def existing_user_params
  case (params[:existing_user])
  when "1"
    fetch_existing_user_params
  else
    { }
  end
end

然后就可以去掉分支了:

new_params = existing_user_params.merge(nested_donation_params)

关于到 "exists && =="的 Ruby 快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37335627/

相关文章:

ruby-on-rails - 如何 "crawl"只有根 URL 与 Anemone ?

ruby - 我如何使用 savon 嵌套属性!哈希?

refactoring - 测试->代码->重构,我们什么时候开始重构?

php - 与多个较小的 SQL 相比,使用连接执行单个 SQL SELECT 是否更有效?

c++ - 用于解析 C++ 源代码并将头内内联方法移动到 .cpp 源文件的工具?

ruby-on-rails - 从网络检测区域设置(列表分隔符)

ruby - 初始ElasticSearch批量索引/插入/上传确实很慢,如何提高速度?

ruby-on-rails - 运行脚本/服务器时如何定义常量?

apache-flex - 关于将累积设计 Flex 项目转换为 Mate 的建议

java - 使用 Java8 Optional<T> 重构遗留代码