我看到人们通常会做这样的事情来检查正确的用户,例如:
class UsersController < ApplicationController
before_action :correct_user, only: [:edit, :update]
# ....
# ....
private
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
为什么我们应该完成所有这些验证,如果我们可以做到:
current_user.update(:user_params)
我认为这样我们确信我们只更新当前的用户信息!我不知道第一种方法是否是我们通过教程或其他方式学习的习惯,但我想知道您的意见?
答案 0 :(得分:0)
Current_user由设计或任何其他身份验证解决方案提供,而不是由rails提供。 除此之外,如果您使用current_user,则只能更新已登录的用户。 如果您有角色和管理员用户也应该能够编辑其他用户,则需要按ID查找这些用户。 技术上,current_user通过在唱歌时提供正确的电子邮件和密码来加载,而User.find通过他的id(显然)找到用户。 确保用户只能更新自己的记录的更好的解决方案是使用授权,例如CanCan。
为您的问题提供更直接的答案:如果您想更新当前登录的用户,使用current_user.update更新它应该没问题,因为current_user包含您可以使用User.find访问的相同用户记录。 我认为你没有看到使用current_user的原因是因为使用User.find更通用,可能部分是因为人们很懒惰而且只使用rails生成器为他们创建的生成的控制器代码。