首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中使用多个操作前操作

在rails中使用多个操作前操作
EN

Stack Overflow用户
提问于 2020-05-09 17:13:01
回答 2查看 197关注 0票数 1

我正在尝试使路由私有,情况是这样的:如果用户想去'galleries/:id'它将重定向到gallery/login?id=:id和在那个PIN上,我做了一个登录表单到该画廊与所需的gallery_login_path

route.rb:

代码语言:javascript
复制
  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_auth_path,方法us如下:

代码语言:javascript
复制
  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上:

代码语言:javascript
复制
    = 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 '

当用户输入错误的个人识别码时,login.html上的错误信息工作正常,但当个人识别码正确时,它不能触发到'galleries/:id‘

在我的galleries_controller中:

代码语言:javascript
复制
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后,它不能触发到'galleries/:id‘,因为如果before_action我打赌,

EN

回答 2

Stack Overflow用户

发布于 2020-05-09 17:30:53

在控制器方法中使用params[:gallery][:pin]更改params[:pin]

routes.rb

代码语言:javascript
复制
get 'gallery/login', to: 'galleries#login', as: 'gallery_login'
post 'gallery/auth', to: 'galleries#auth', as: 'gallery_auth'
resources :galleries 
票数 0
EN

Stack Overflow用户

发布于 2020-05-09 23:26:33

问题是有点难understand...you想要使用多个before_actions?要做到这一点,只需添加更多规则。

代码语言:javascript
复制
before_action :authenticate, only: [:show]
before_action :is_admin?, only: [:create]

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61694333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档