我有一个会话控制器,具有 :new、:create 和 :delete 操作。我还有一个检查当前页面控制器的方法:
def controller_for(path)
Rails.application.routes.recognize_path(path)[:controller]
end
通常,此方法可以正常工作,但是如果用户访问/login
并使用不正确的登录详细信息登录,则 rails 会将 url 更改为/sessions
并呈现:new
操作,此时我上面的方法会引发错误
No route matches "/sessions"
似乎recognize_path
正在尝试这样做:
>> r = Rails.application.routes
>> r.recognize_path "/sessions"
=> {:controller=>"sessions", :action=>"index"}
由于我没有索引操作,因此会导致错误。我真正想要的是:
>> r.recognize_path "/login"
=> {:controller=>"sessions", :action=>"new"}
那么如何强制 rails 将 url 保留为/login
登录失败时的 URL,而不是将其更改为/sessions
?