私はこのようなルートを持っています:
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
を渡していないため、これは正しいです。
では、ルートを別のページにリダイレクトするにはどうすればよいですか?おそらく、正しいパスを生成し、それをhttp 302に渡す必要があります。または/および次のようにする方法:
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の例でそれを見つけましたが、そのような機能を追加するプラグインも見つけました。
手伝ってくれてありがとう!
Rails 3では、次のように書くことができます:
root :to => redirect('/prepayments')
次のページには、Rails 3: http://www.railsdispatch.com/posts/Rails-routing でこれらのリダイレクトを行うための優れた紹介があります。
リダイレクトオプションドキュメント化 のようには見えません。
ここに行きます(@derek、最後の例を参照):
現在のリクエストのドメインのサブドメインにリダイレクトします
root to: redirect(subdomain: 'foo', path: '/bar') # => foo.example.com/bar
一致したルートからの置換されたパラメータを使用したリダイレクト
get 'stores/:name(*all)', to: redirect(subdomain: 'stores', path: '/%{name}%{all}')
ステータスコードでリダイレクト(例:デフォルトの301ではなく302)
redirect(path: '/foo', status: 302)
条件付きブロックでリダイレクト
redirect(status: 302) { |params, request|
case request.Host
when 'localhost'
'/foo'
when /example.com$/
'/bar'
else
'/baz'
end
}
Rails 4(私の場合は4.2.0))に、これを追加しました:match "*path" => "main#index", :via => [:get, :post]
からapp/config/routes.rb
。
main
の代わりに何を置くべきかを調べるため。このファイルを見てください:app/controllers/main_controller.rb
。繰り返しますが、あなたの名前はmain_controller.rb
、ただしsomething_controller.rb
、おそらく[〜#〜] not [〜#〜]application_controller.rb
またはservers_controller.rb
。そのファイルには、次のようなコードが含まれています。
class MainController < ApplicationController
def index
render :layout => "angular"
end
end
MainControllerがある場合、エラーメッセージでRailsがブラウザでここから何をすべきかを提供します。単にmainmatch "*path" => "main#index", :via => [:get, :post]
コントローラのプレフィックスが何であれ。
これが理にかなっているといいのですが。私はRuby初心者でもあります