我在我的某个控制器操作中搜索用户。有时,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行,但这对我来说感觉很乱。但是,也许不是吗?
谢谢!
答案 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)