Ruby on rails 在rails中使用multiple-before-action
我试图将路线保密,情况如下: 如果用户想进入“图库/:id” 它将重定向到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
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:Yourbefore\u action
将只对show
操作执行,但是我在您的控制器中没有看到show
操作。您的before\u操作
将仅对show
操作执行,但我在控制器中没有看到show
操作。