ruby-on-rails - Rails:语法错误 - 会话控制器中出现意外的“{”
问题描述
我从这个 repo 克隆了一个测验应用程序项目:https ://github.com/Pk13055/quiz-app
我正在尝试使用以下命令从我的系统运行它:
rails server
但我收到此错误:
/home/laxmanrm/.rvm/gems/ruby-2.6.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '{', expecting end ...ion only: [:create, :destroy] { request.env["devise.skip_tim... ... ^ /home/laxmanrm/.rvm/gems/ruby-2.6.0/gems/devise-4.3.0/app/controllers/devise/sessions_controller.rb:5: syntax error, unexpected '}', expecting end ..."devise.skip_timeout"] = true } ... ^
Extracted source (around line #5):
prepend_before_action :allow_params_authentication!, only: :create
prepend_before_action :verify_signed_out_user, only: :destroy
prepend_before_action only: [:create, :destroy] { request.env["devise.skip_timeout"] = true }
# GET /resource/sign_in
def new
如何纠正此错误并使应用程序运行?
session_controller.rb
class Devise::SessionsController < DeviseController
prepend_before_action :require_no_authentication, only: [:new, :create]
prepend_before_action :allow_params_authentication!, only: :create
prepend_before_action :verify_signed_out_user, only: :destroy
prepend_before_action only: [:create, :destroy] { request.env["devise.skip_timeout"] = true }
# GET /resource/sign_in
def new
self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
yield resource if block_given?
respond_with(resource, serialize_options(resource))
end
解决方案
Ruby 2.5+ 和设计似乎存在问题:https ://github.com/plataformatec/devise/issues/4630 。
显然设计 4.4.0 已修复它,但您使用的是 v4.3.0(检查您的 Gemfile.lock)。你需要更新它:
bundle update devise