【问题标题】:Rails routing error no route matches?Rails路由错误没有路由匹配?
【发布时间】:2013-12-24 18:04:01
【问题描述】:

环境:安装了 Ubuntu 和最新版本 Rails 和 ruby​​ 的虚拟机

应用控制器代码:

class ApplicationController < ActionController::Base
  before_filter :set_current_user
  protected # prevents method from being invoked by a route
  def set_current_user
    debugger
    # we exploit the fact that find_by_id(nil) returns nil
    @current_user ||= Moviegoer.find_by_id(session[:user_id])
    redirect_to login_path and return unless @current_user
  end
end

使用的调试器@current_user 按预期为空,但重定向语句失败“无路由匹配”

Routes.rb 代码:

get  'auth/:provider/callback' => 'sessions#create',:as => :login
post 'logout' => 'sessions#destroy'
get  'auth/failure' => 'sessions#failure'

错误:

Error: ActionController::RoutingError (No route matches {:controller=>"sessions", :action=>"create"}):
  app/controllers/application_controller.rb:8:in `set_current_user'

【问题讨论】:

    标签: ruby-on-rails routes rails-routing


    【解决方案1】:

    根据指定的路由,login_path 需要一个参数,auth/:provider/callback 中的 'provider' 的值

    【讨论】:

    • 此外,“and return”似乎是多余的,因为它后面没有您想要阻止其执行的代码。也不推荐使用 find_by_id - 最好使用 where(:id => session[:user_id).first 或者更好地执行一个普通的旧 find(session[:user_id]) if session.key?(:user_id)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多