3

Rails 4 を使用しており、koudoku ストライプ 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 要求をコントローラーにマップするだけで、表示される内容を決定する条件付きロジックを備えている必要があります。

この場合、リダイレクトしたいので少し異なりますが、個人的にはコントローラーに入れます。つまり、 を に送信しrootdashboard#indexそのコントローラーの上部 (またはbefore_filter) で実行するだけです。

redirect_to login_path unless current_user_authenticated?

(ここでは、ログイン用の名前付きルートがあると想定しています。これは良い習慣でありcurrent_user_authenticated?、リダイレクトの前に必要なロジックをチェックする方法でもあります。これは、価値が何であれ、より Rails-y なアプローチになります。 ..)

于 2013-09-28T20:58:14.257 に答える