Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 避免在采取行动前进行处理_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 避免在采取行动前进行处理

Ruby on rails 避免在采取行动前进行处理,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我正在构建用户权限,并尝试使用“before_action”评估条件,如果它返回true,我希望不执行“create”操作,但如果它返回true,则可以创建记录 那将是我的行动之前 before_action :permiso_create, only: [:create] def create @producto = Producto.new(producto_params) respond_to do |format| if @producto.save for

我正在构建用户权限,并尝试使用“before_action”评估条件,如果它返回true,我希望不执行“create”操作,但如果它返回true,则可以创建记录

那将是我的行动之前

before_action :permiso_create, only: [:create]

def create
  @producto = Producto.new(producto_params)
  respond_to do |format|
    if @producto.save
      format.html { redirect_to @producto, notice: 'Producto was successfully created.' }
      format.json { render :show, status: :created, location: @producto }
      format.js {flash.now[:notice] = 'El producto se ha creado de forma exitosa.'} #ajax
    else
      format.html { render :new }
      format.json { render json: @producto.errors, status: :unprocessable_entity }
      format.js {flash.now[:alert] = 'Error al crear el producto.'} #ajax

    end
  end
end
我希望如果条件返回true,不要创建记录或执行创建操作,只显示带有“权限被拒绝”消息的flash警报

我尝试使用不可处理的_实体,但它没有显示消息js,如下所示:

def permiso_create
  @puede_crear = current_usuario.profiles.find_by_Descripcion("products").Altas
  if @puede_crear != true
      respond_to do |format|
        format.js {flash.now[:alert] = 'you don't have permission.'} #ajax
      end
     head :unprocessable_entity

  end
end

我已经为此创建了一个名为gem的程序,它使您有机会直接对控制器中的用户进行身份验证和授权

如果用户未经授权,则会引发异常,并且不会执行该操作。然后捕获此异常并以401或403状态响应用户


如果您不想使用gem,您也可以通过在
permiso\u create
方法中引发异常并捕获此异常来完成此操作。

我已为此调用创建了一个gem,它使您有机会直接对控制器中的用户进行身份验证和授权

如果用户未经授权,则会引发异常,并且不会执行该操作。然后捕获此异常并以401或403状态响应用户


如果您不想使用gem,您也可以通过在
permiso\u create
方法中引发异常并捕获此异常来完成此操作。

您可以在验证后使用
return

def permiso_create
  @puede_crear = current_usuario.profiles.find_by_Descripcion("products").Altas
  if @puede_crear != true
    # you can return a flash message before stop the flow here
    @foo = nil
    return

  end
end
这将停止流动

编辑:添加条件

before_action :permiso_create, only: [:create]
def create
  if @foo.nil?
    return
  end
  #continue with your code
end

您可以在验证后使用
return

def permiso_create
  @puede_crear = current_usuario.profiles.find_by_Descripcion("products").Altas
  if @puede_crear != true
    # you can return a flash message before stop the flow here
    @foo = nil
    return

  end
end
这将停止流动

编辑:添加条件

before_action :permiso_create, only: [:create]
def create
  if @foo.nil?
    return
  end
  #continue with your code
end

即使您的条件不满足,您仍然可能需要格式化响应。这应该做到:

def permiso_create
  @puede_crear = current_usuario.profiles.find_by_Descripcion("products").Altas
  unless @puede_crear
    respond_to do |format|
      format.js {flash.now[:alert] = "you don't have permission.", status: :unprocessable_entity} 
    end
  end
end

即使您的条件不满足,您仍然可能需要格式化响应。这应该做到:

def permiso_create
  @puede_crear = current_usuario.profiles.find_by_Descripcion("products").Altas
  unless @puede_crear
    respond_to do |format|
      format.js {flash.now[:alert] = "you don't have permission.", status: :unprocessable_entity} 
    end
  end
end

是的,它会停止流,但在“permiso_create”方法内,并且不会停止该方法create@luis31您可以在使用before_action I Edit my Answer时返回一个变量并添加一个条件。此外,您还可以找到更多信息,这样它就不会继续执行“permiso_create”方法的条件。问题是只使用返回只会停止“permiso_create”方法的流并执行createmethod@luis31我明白你的意思,然后你可以在你创建的方法中验证变量的存在,我编辑了我的回答是的,它停止了流程,但在方法“permiso_create”中,不要停止这种方法create@luis31您可以在使用before_action I Edit my Answer时返回一个变量并添加一个条件。此外,您还可以找到更多信息,这样它就不会继续执行“permiso_create”方法的条件。问题是只使用返回只会停止“permiso_create”方法的流并执行createmethod@luis31我明白你的意思,然后你可以验证你创建的方法中变量的存在,我编辑了我的答案,它停止了循环,但问题是我以前试图通过js发送消息,但它没有显示在屏幕上,我用我发送消息的方式更新了帖子,并使用了不可处理的实体。我得到了这个错误:SyntaxError(/home/luis/sites/adcv2/app/controllers/productos_controller.rb:198:语法错误,意外的tLABEL…没有权限。“,状态::无法处理的_entity}…^):app/controllers/productos_controller.rb:198:语法错误,意外的tLABELit工作,它停止了循环,但问题是我以前试图通过js发送消息,但它没有显示在屏幕上,我用我发送不可处理的_实体的方式更新了帖子我得到了这个错误:SyntaxError(/home/luis/sites/adcv2/app/controllers/productos_controller.rb:198:语法错误,意外的tLABEL…在没有权限的情况下。”,status::unprocessable_entity}…^):app/controllers/productos_controller.rb:198:语法错误,意外的tLABEL