0

URL サフィックス (つまり、 www.example.com/ suffix ) がイニシャライザの 1 つのハッシュ キーに対応する場合にのみ、特定のコントローラ (sample_controller と呼びます) にリクエストを転送するルーティング式を作成しようとしています。 . それ以外の場合は、Rails にリクエストを別のコントローラー (たとえば、1 つのルートが参照する) にルーティングしてもらいます。たとえば、 hash を指定するとRELEVANT_HASH = {"a" => "yada", "b" => "bla"}、 www.example.com/ a は sample_controller にルーティングされますが、 www.example.com/ cはルーティングされず、代わりにルートのルートがロードされます。

私は置くことによってそれをやろうとしてきました

match '/:page_name' => 'sample_controller#action', :as => :something, :constraints => lambda { |r| MyInitializer::RELEVANT_HASH.has_key?(r.params[:page_name]) }

私のroutes.rbファイルで。ただし、ActionDispatch::Routing::Mapper のコンテキスト内にあるため、routes.rb の do/end ブロック内から MyInitializer を使用することはできず、Rails は「初期化されていない定数 MyInitializer」エラーを返します。

MyInitializer を routes.rb からアクセスできるようにする (たとえば、application.rb から参照する) 回避策はありますか? コードを do/end ブロックの外に配置すると、スコープの問題は解決しますか? または、MyInitializer を routes.rb に公開せずに目標を達成する別の方法はありますか?

4

1 に答える 1

1

routes.rb から MyInitializer にアクセスできるようにする回避策はありますか?

はいあります。次の行を routes.rb に追加します。

require Rails.root.join('config', 'initializers', 'my_initializer.rb')
于 2013-09-01T10:30:07.890 に答える