я пытаюсь сделать маршрут частным, случай выглядит следующим образом: если пользователь хочет go 'galleries/:id'
, он перенаправит на gallery/login?id=:id
и на этом gallery_login_path
html, я создаю форму входа в эту галерею с требуемым PIN-кодом
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_auth_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-код, появляется сообщение об ошибке при входе в систему. html работает нормально, но когда PIN-код правильный, он не может срабатывать на ' galleries /: id '
в моем galleries_controller:
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 для этого случая? есть ли способ исправить это? потому что в форме входа в галерею после того, как пользователь ввел правильный пин-код, он не может срабатывать на 'galleries /: id', потому что oif before_action я ставлю,