ruby-on-rails - Active Record 查询 - 如果提供 nil 值则查找的默认值

标签 ruby-on-rails ruby activerecord

我正在我的 Controller 操作之一中搜索用户。有时,params[:user_id] 将为 nil,在这种情况下,搜索应该产生 current_user。以下两种搜索方法似乎产生相同的结果

@user = User.find(params[:user_id]||=current_user)

@user = User.where('id = ?', params[:user_id]).first || current_user

问题是:

1) 哪种搜索方法更合适,以及 2) 如果 params[:user_id] 为 nil,是否有办法一起绕过搜索?

我确定我可以想出一个 if/else 语句来完成第 2 行,但我觉得这有点老套。但是,也许不是?

谢谢!

最佳答案

这是三元运算符的完美位置

@user = params[:user_id] ? User.find(params[:user_id]) : current_user

我想补充一点。

I'm sure I could come up with a if/else statement to accomplish line 2 but that
feels hackish to me. But, maybe it's not?

许多开发人员喜欢使用流畅的一行而不是更具可读性的 if/else 控制流来获得可爱我也这样做!

在编写代码时,请记住可读性远比流畅的一行代码重要。话虽如此,您的具体示例是使用三元运算符的好地方,但替代方案 if/else 也是可以接受的。 Ruby 甚至可以让它比其他一些语言更酷

@user = if params[:user_id]
  User.find(params[:user_id])
else
  current_user
end

关于ruby-on-rails - Active Record 查询 - 如果提供 nil 值则查找的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15386734/

相关文章:

php - 从 PHP 切换到 Rails 需要帮助翻译 URL 缩短器

c++ - 想在 Qt 中存储配置文件,使用 SQLite 或其他东西?

mysql - 如何快速查看数据库中是否存在大量记录?

ruby-on-rails - 为深层嵌套模型创建工厂

ruby-on-rails - 工厂女孩将参数传递给 trait

ruby-on-rails - 如何为rails中的单个请求跨模型设置变量?

ruby-on-rails - 如何在本地主机上为 Ruby on Rails 应用程序运行 SSL 证书?

node.js - 无法使用可执行 compass 找到 gem compass (>= 0.a)

ruby-on-rails - 如何让两个 Controller 共享一个 Controller Action ?

ruby-on-rails - Rails 模型上的无效日期时间导致 nil