在将逻辑放入视图时,如何防止current_user设置为nil

时间:2015-08-11 02:43:35

标签: ruby-on-rails

我有以下代码

- if current_user && !current_user.is_owner?(@product)
  p do this

我添加了current_user &&逻辑,因为如果用户没有登录会发生错误。但我想知道这是否是正确的方法。

6 个答案:

答案 0 :(得分:1)

- if user_signed_in? && !current_user.is_owner?(@product)
  p do this

答案 1 :(得分:1)

如果您需要处理来自登录用户的参数的视图,您可能最终必须解决视图中的其他问题。

如果未填充before_action变量,我建议您添加一个重定向到登录页面的current_user

类似的东西:

class YourController < ActionController::Base
  before_action :redirectIfNoCurrentUser

  ** your functions/actions **

  def redirectIfNoCurrentUser
    redirect_to(new_user_session_path) unless current_user 
  end
end

before_actionskip_before_action can be configured在每个操作的基础上使用:only选项(如果需要)

答案 2 :(得分:1)

你说得对,这已经是正确的做法了。

在检查并看到current_user返回false之后,它知道条件将为false并且不执行条件的第二部分。

答案 3 :(得分:1)

最好将任何值检查为current_user.present?而不是current_user,因为前一个值返回一个布尔值。

您可以尝试使用authenticate_user!设计方法,如果您不希望未登录的用户访问该页面。

class YourController < ActionController::Base
  before_action :authenticate_user!, only: [:your_actions]

  def your_actions
  end

end

然后在您的观点中,您可以处理您的情况。

答案 4 :(得分:1)

您的代码很好,但是如果您想避免使用nil检查乱丢代码,您可以考虑使用null object pattern并使用定义的默认行为生成NullUser。

答案 5 :(得分:-1)

也许您可以尝试使用try method

if current_user.try(:is_owner?, @product)
  p do this
end