Ruby on rails 如何使用before_action with:除非和参数

Ruby on rails 如何使用before_action with:除非和参数,ruby-on-rails,Ruby On Rails,我有一个授权模块,用于授权用户操作。一切都很好,但现在如果请求页面的用户是当前用户,我想跳过该操作。资源嵌套在user下面,因此作为参数的一部分传递:user_id 据我所知,最简单的方法是使用lambda,但我似乎无法访问before过滤器中传递的参数 这是我的控制器 class Certifications::FitnessController < ApplicationController prepend_before_action :authenticate_user! b

我有一个授权模块,用于授权用户操作。一切都很好,但现在如果请求页面的用户是当前用户,我想跳过该操作。资源嵌套在user下面,因此作为参数的一部分传递:user_id

据我所知,最简单的方法是使用lambda,但我似乎无法访问before过滤器中传递的参数

这是我的控制器

class Certifications::FitnessController < ApplicationController
  prepend_before_action :authenticate_user!
  before_action :authorize, unless: -> { params[:user_id] == current_user.id }
end
或者,您可以这样做:-

before_action :authorize

def authorize
  unless params[:user_id].to_i == current_user.id
    #do your stuff..
  end
end
第二种选择

before_action :authorize, unless: -> { params[:user_id].to_i == current_user.id }

你能在控制器中定义方法吗?比如def is_current_user params[:user_id]==current_user.id在你的before action中结束,before_action:authorize,除非:->is_current_user类似于此我能在上面的代码中内联它,我只需要将参数转换成一个整数来匹配当前_user.idahha的类型,很高兴听你这么说。如果你打电话给我,这就行了。事实上,如果我加上这个,上面的lamda呼叫也能正常工作……谢谢你把我放在正确的轨道上。@OneWorking耳机我也加上了你的lamda呼叫应答:D谢谢。你必须打电话给我,就像我在编辑你的代码和我的代码时一样`params[:user_id]返回一个字符串,因此比较值为1==1,这将不允许当前用户对其拥有的记录执行操作。
before_action :authorize

def authorize
  unless params[:user_id].to_i == current_user.id
    #do your stuff..
  end
end
before_action :authorize, unless: -> { params[:user_id].to_i == current_user.id }