Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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 在rails中使用multiple-before-action_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在rails中使用multiple-before-action

Ruby on rails 在rails中使用multiple-before-action,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图将路线保密,情况如下: 如果用户想进入“图库/:id” 它将重定向到gallery/login?id=:id 在那个gallery\u login\u路径上html,我用所需的PIN码制作了一个登录表单,进入那个gallery route.rb: resources :galleries get 'gallery/login', to: 'galleries#login', as: 'gallery_login' post 'gallery/auth', to: 'galler

我试图将路线保密,情况如下: 如果用户想进入“图库/:id” 它将重定向到
gallery/login?id=:id
在那个
gallery\u login\u路径上
html,我用所需的PIN码制作了一个登录表单,进入那个gallery

route.rb:

  resources :galleries
  get 'gallery/login', to: 'galleries#login', as: 'gallery_login'
  post 'gallery/auth', to: 'galleries#auth', as: 'gallery_auth'

//

gallery GET    /galleries/:id
gallery_login GET    /gallery/login
gallery_auth POST   /gallery/auth
该表单将触发URL:
gallery\u auth\u path
,方法如下:

  def auth
    @error_login
    @gallery = Gallery.find_by(id: params[:gallery_id])
    if @gallery.pin.nil?
      redirect_to "galleries/#{@gallery.id}"
    elsif  @gallery.pin == params[:pin] && @gallery.expired_pin.past?
      @error_login = 'PIN expired'
    elsif @gallery.pin == params[:pin] && !@gallery.expired_pin.past?
      redirect_to "/galleries/#{@gallery.id}"
      true
    else
      @error_login = 'PIN not match'
    end
    @error_login = 'Required PIN' unless params[:pin].present?
    if @error_login.present?
      respond_to do |format|
        @error_login
        format.js {render 'galleries/error_login' , layout: false}
      end
    end
  end
login.html.haml
上:

    = form_with url: gallery_auth_path do |f|
      = hidden_field_tag :gallery_id, "#{params[:id]}"
      .form-group.row
        = f.label :pin, class: 'col-sm-2 col-form-label text-center'
        .col-sm-4.col-md-4.col-xs-4
          = f.text_field :pin, class: 'form-control', placeholder: 'PIN'
      .form-group
        .col-sm-4
          = f.submit 'Login', data: {disable_with: 'Loading...'}, class: 'btn btn-primary '
当用户输入错误的PIN时,login.html上的错误消息可以正常工作,但当PIN正确时,它无法触发“galleries/:id”

在“我的电脑”控制器中:

before_action :authenticate, only: [:show]
  def login
  end 

  def auth
    // method on above 
  end

  private 

  def authenticate
    redirect_to "/gallery/login?id=#{params[:id]}"
  end
在这个案例中,我使用before_action是错误的吗?有没有办法纠正这种情况?
因为在用户输入正确的pin后,在gallery登录表单上,它无法触发为“galleries/:id”,因为在我打赌的操作之前,oif在控制器方法中更改
参数[:pin]

routes.rb
使用控制器方法中的
params[:gallery][:pin]
更改
params[:pin]

routes.rb
这个问题有点难理解…你想在动作前使用多个?要做到这一点,只需添加更多规则

before_action :authenticate, only: [:show]
before_action :is_admin?, only: [:create]

另外,你帖子上的第一条评论说你没有动作
show
。在哪里,您的身份验证只会在该操作之前被调用

这个问题有点难理解……您想在动作之前使用多个?要做到这一点,只需添加更多规则

before_action :authenticate, only: [:show]
before_action :is_admin?, only: [:create]

另外,你帖子上的第一条评论说你没有动作
show
。在哪里,您的身份验证只会在该操作之前被调用

那是干什么用的?哪种方法??我的html页面上没有错误,但在登录gallery success时无法触发'galleries/:id',我尝试重定向到'galleries/:id',它变成了再次登录的返回更改
@gallery.pin==params[:pin]
with
@gallery.pin==params[:gallery][:pin]
内部身份验证方法我知道为什么吗?我现在正在尝试再次测试它如果你检查参数,
pin
存在于
gallery
key中它不起作用,它说:NoMethodError-未定义的方法“[]”用于nil:NilClass:这是干什么用的?哪种方法??我的html页面上没有错误,但在登录gallery success时无法触发'galleries/:id',我尝试重定向到'galleries/:id',它变成了再次登录的返回更改
@gallery.pin==params[:pin]
with
@gallery.pin==params[:gallery][:pin]
内部身份验证方法我知道为什么吗?我现在正在尝试再次测试它如果你检查参数,
pin
出现在
gallery
key中它不起作用,它说:NoMethodError-nil的未定义方法“[]”:NilClass:Your
before\u action
将只对
show
操作执行,但是我在您的控制器中没有看到
show
操作。您的
before\u操作
将仅对
show
操作执行,但我在控制器中没有看到
show
操作。