Rails设计:我应该使用current_user还是坚持使用User.find(params [:user_id])

时间:2016-06-12 07:33:27

标签: ruby-on-rails devise

我想知道在我的用户模型中使用Devise时,在我的控制器和视图中使用@user = current_user.id vs @user = User.find(params[:user_id])是否有任何区别(仅限current_user)。什么被认为是“更好”的方式。

示例:

  def index
    current_user
  end

  def index
    @user = User.find(current_user.id)
  end

 def index
   @user = User.find(params[:user_id])
 end

2 个答案:

答案 0 :(得分:1)

使用

@user = User.find(current_user.id)

毫无意义,因为如上所述,您可以使用:

@user = current_user

但是,@user = User.find(params[:user_id])在您传递user_id参数的某些情况下非常有用(例如在link_torequest中。

请注意,如果您未手动传递参数,则参数不会包含user_id。但是,current_user始终可以访问

答案 1 :(得分:0)

Devise将当前用户创建为会话变量,这意味着您可以在任何视图或控制器中使用它。

如果用户未登录,您将收到错误,因此此处的示例是if语句包围的登录/注销按钮,以检查当前用户是否已指定

<% if user_signed_in? %> 
//here we can use current_user for what ever you wish
    <a href="/users/sign_out" class="btn btn-primary">Logout</a>
    <a href="/users/edit/" class="btn btn-default">Edit Your profile</a>

    <% else %>
  // here we cant use current_user as it is not specified


    <a href="/users/sign_in" class="btn btn-primary">Sign in</a>
    <a href="/users/sign_up" class="btn btn-warning">Sign up</a>
    <% end %>