我想知道在我的用户模型中使用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
答案 0 :(得分:1)
使用
@user = User.find(current_user.id)
毫无意义,因为如上所述,您可以使用:
@user = current_user
但是,@user = User.find(params[:user_id])
在您传递user_id
参数的某些情况下非常有用(例如在link_to
或request
中。
请注意,如果您未手动传递参数,则参数不会包含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 %>