3

我正在使用 Rails 4 并试图包含 koudoku stripe gem。这是我的路线:

# Added by Koudoku.
mount Koudoku::Engine, at: 'koudoku'
scope module: 'koudoku' do
    get 'pricing' => 'subscriptions#index', as: 'pricing'
end

resource :account

devise_for :users, :skip => [:sessions]
as :user do
    get '/login' => 'devise/sessions#new', :as => :new_user_session
    post '/login' => 'devise/sessions#create', :as => :user_session
    get '/logout' => 'devise/sessions#destroy', :as => :destroy_user_session
end

get '/dashboard', to: 'dashboard#index'
get '/reports/generate', to: 'reports#generate'

authenticated :user do
    root :to => 'dashboard#index', :as => :authenticated_root
end

root :to => redirect('/login')

这是我得到的错误:

undefined local variable or method `root_url

我可以很好地访问其他路由,它只是试图从模块路由呈现应用程序助手方法(例如,我定义的自定义应用程序方法或路由方法)......这有意义吗?我该如何解决?

4

2 回答 2

7

尝试添加“main_app”。在你的根路径之前。例如:

main_app.root_path
于 2014-02-23T18:29:15.727 回答
0

路由层中的条件逻辑有点违背 Rails MVC 架构的意图。路由文件应该只是将 Web 请求映射到控制器,然后控制器具有条件逻辑来确定显示的内容。

在这种情况下,它有点不同,因为您想要重定向,但我个人仍然会将它放在控制器中。换句话说,发送rootto dashboard#index,然后在该控制器的顶部(或在 a 中before_filter)只是做

redirect_to login_path unless current_user_authenticated?

(在这里我假设您将有一个命名的登录路径,这将是一个很好的做法,以及一种current_user_authenticated?在重定向之前检查您想要的任何逻辑的方法。这将是一种更 Rails-y 的方法,无论它有什么价值。 ..)

于 2013-09-28T20:58:14.257 回答