Ruby on rails 基于Rails中的链接表字段分配实例变量
我正在尝试创建一个系统来检查当前用户是否有权编辑记录。我认为这样做的方法是将@user的变量分配并实例化到显示记录的链接ID和一个私有函数,该函数重定向,除非Ruby on rails 基于Rails中的链接表字段分配实例变量,ruby-on-rails,Ruby On Rails,我正在尝试创建一个系统来检查当前用户是否有权编辑记录。我认为这样做的方法是将@user的变量分配并实例化到显示记录的链接ID和一个私有函数,该函数重定向,除非@user=当前用户,但当我这样做时,我每次都会得到重定向行为(即使用户拥有该记录) 这是控制器的设置 def edit @deal = Deal.find(params[:id]) @user = User.where(params[:id] === @deal.user_id) correct_user
@user
=当前用户
,但当我这样做时,我每次都会得到重定向行为(即使用户拥有该记录)
这是控制器的设置
def edit
@deal = Deal.find(params[:id])
@user = User.where(params[:id] === @deal.user_id)
correct_user
end
...
private
def correct_user
unless @user === current_user
redirect_to root_path
flash[:error] = 'You can only edit deals that you own'
end
end
用户和交易模型通过拥有多个
class User < ApplicationRecord
has_many :deals
...
class Deal < ApplicationRecord
belongs_to :user
该项目是使用Desive设置的,因此也可以使用这些帮助程序。使用
==
而不是==
您只想将@user
与当前用户进行比较
@user == current_user
看到这里的区别了吗
你也需要改变
@user = User.where(params[:id] === @deal.user_id)
到
好的,那么从哪里开始 首先,不要使用
==
来比较记录,而是使用=
第二:
def edit
@deal = Deal.find(params[:id])
@user = User.find_by(params[:id]: @deal.user_id)
correct_user
end
当试图查找用户时,您需要提供AR选项作为散列,而不是布尔参数。如果要在未找到记录时引发异常,请使用find
,或者使用find\u by
简单地返回nil
在correct\u user
中,再次使用=
而不是==
然而,这段代码仍然不是很漂亮,可能需要一些重构;)
@user = @deal.user
def edit
@deal = Deal.find(params[:id])
@user = User.find_by(params[:id]: @deal.user_id)
correct_user
end