私はこのようなルートを持っています:
map.namespace 'prepayments', :path_prefix => '/:locale/prepayments' do |prepayment|
prepayment.root :controller => 'login', :namespace => 'prepayments'
...
end
map.redirect '/', :controller => 'prepayments/login' # this is not working
# I tried also
map.root :controller => 'prepayments/login'
www.example.comと入力すると、www.example.com / en/prepaymentsにリダイレクトされます。
上記の例から使用したときmap.root
は、www.example.comにとどまり、正しいビューをレンダリングしました(ただし、表示されなかったため、正常:locale
に機能しました)。後でルートに追加:locale
しました。この時点から、ビュー(何らかのフォームを使用)は追加されません。正しく動作しません。フォームに対応するルートが見つからないというエラーが表示されます。これは、を渡さなかったため:locale
です。
では、rootを別のページにリダイレクトする方法は?おそらく正しいパスを生成し、それをhttp302に渡す必要があります。または/そして次のようなものを作成する方法:
map.root :controller => 'prepayments/login', :my_locale => 'en'
編集:私のレーキルートは次のようになります:
prepayments_root /:locale/prepayments {:controller=>"prepayments/login", :action=>"index"}
prepayments_create /:locale/prepayments/send_email {:method=>:post, :controller=>"prepayments/login", :action=>"send_email"}
prepayments_home /:locale/prepayments/home {:controller=>"prepayments/prepayments", :action=>"home"}
prepayments_save /:locale/prepayments/save {:controller=>"prepayments/prepayments", :action=>"save"}
prepayments_agree /:locale/prepayments/agree {:controller=>"prepayments/prepayments", :action=>"agree"}
prepayments_disagree /:locale/prepayments/disagree {:controller=>"prepayments/login", :action=>"logout"}
prepayments_payment /:locale/prepayments/payment {:controller=>"prepayments/prepayments", :action=>"payment"}
prepayments_payment_email /:locale/prepayments/payment_email {:controller=>"prepayments/prepayments", :action=>"payment_email"}
/:locale/prepayments/:uid {:controller=>"prepayments/login", :action=>"verify"}
redirect / {:controller=>"prepayments/login", :action=>"index"}
編集:
ギャレットが提案した方法でやってみたところ、うまくいきました。ルートを変更しました:
map.redirect '/', :controller => 'prepayments/login', :action => 'welcome'
コントローラにウェルカムメソッドを追加しました。
def welcome
redirect_to prepayments_root_path(:locale => 'en')
end
そしてそれは私が望むように動作します(それでそれは私のブラウザのURLを変更します)。
もう1つの方法は、次のようにルートを変更することです。
map.root :controller => 'prepayments/login', :locale => 'en'
それも機能しますが、リダイレクトされません(ブラウザのURLは変更されません)。のようなオプションがあるかどうかはわかりませんmap.redirect
。wwwの例で見つけましたが、そのような機能を追加するプラグインも見つけました。
手伝ってくれてありがとう!