活动记录查询 - 如果提供了零值,则查找的默认值

时间:2013-03-13 13:28:57

标签: ruby-on-rails ruby activerecord

我在我的某个控制器操作中搜索用户。有时,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]为零,有没有办法绕过搜索?

我确信我可以拿出一个if / else语句来完成第2行,但这对我来说感觉很乱。但是,也许不是吗?

谢谢!

2 个答案:

答案 0 :(得分: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甚至可以让你比其他语言略微 cool

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

答案 1 :(得分:1)

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

您不需要=

@user = User.find(params[:user_id]||current_user)
相关问题