应用程序助手方法可用性

时间:2013-09-28 20:04:43

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

我正在使用Rails 4并尝试包含koudoku条纹宝石。这是我的路线:

# 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

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

2 个答案:

答案 0 :(得分:7)

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

main_app.root_path

答案 1 :(得分:0)

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

在这种情况下,由于你想重定向,它有点不同,但我个人仍然会把它放在控制器中。换句话说,将root发送到dashboard#index,然后在该控制器的顶部(或在before_filter中)发送

redirect_to login_path unless current_user_authenticated?

(这里我假设你有一个登录的命名路由,这将是一个很好的做法,以及一个current_user_authenticated?方法来检查重定向之前你想要的任何逻辑。这将是一个更多的Rails -y方法,无论值多少......)