1

我正在我的控制器操作之一中搜索用户。有时,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 行,但这对我来说感觉很骇人听闻。但是,也许不是?

谢谢!

4

2 回答 2

4

这是三元运算符的理想场所

@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
于 2013-03-13T13:36:57.343 回答
1

不知道你要去哪里,但对我来说第一个更像 Rails。

你不需要=

@user = User.find(params[:user_id]||current_user)
于 2013-03-13T13:35:29.457 回答