11546


Ruby on Rails のルーティングについてです。  
複数の半静的ページを1つのコントローラーで制御しようとしています。  
config/routes.rb に全ページ分 get メソッドを書くのも辛いので、下記のように書きました。

[code]

      StaticPagesController.action_methods.each do |action|
        match action,
          action: action,
          controller: :static_pages,
          via: :get,
          as: action
      end
    
[/code]

しかし、これでは階層を持った URL に対応できません。(example.com/foo/bar)  
1つ1つ get 'foo/bar' => 'static_pages#bar' のように書く以外に解決法はないでしょうか。  
完全に初心者なので「ない」もしくは「設計上好ましくない」ということだけでも確認したいです。

以上、よろしくお願い致します。

* * *

追記

StaticPagesController で、  
example.com/page1 と、  
example.com/foo/page2 と、  
example.com/foo/bar/page3 の  
全アクションを書くのが目的です。  
コントローラーのコードは下記のようなイメージです。

[code]

    class StaticPagesController < ApplicationController
      def page1
      end
    
      def page2
      end
    
      def page3
      end
    end
    
[/code]

ただし、できることなら

[code]

    get 'page1' => 'static_pages#page1', 
    get 'foo/page2' => 'static_pages#page2', 
    get 'foo/bar/page3' => 'static_pages#page3'
    
[/code]

と一つずつ書くのは避けたいです。


CC BY-SA 3.0
2015-06-19T09:54:45.303
11518
2015-06-20T03:57:51.207
2015-06-19T13:01:04.443
10215
10215
question
ruby-on-rails
Rails 4.2 階層を持った URL の静的ページを1つのコントローラーでルーティングしたい


Railsの Route Globbing を使ってはいかがでしょうか？

参考サイト  
<http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-
segments>

### Route Globbingの例

config/routes.rb

[code]

    get '*path', to: 'pages#show'
    
[/code]

app/controllers/pages_controller.rb

[code]

    class PagesController < ApplicationController
        def show
            @path = params[:path]
        end
    end
    
[/code]

app/views/pages/show.html.erb

[code]

    <%= @path %>
    
[/code]


CC BY-SA 3.0
2015-06-20T03:31:42.897
11546
2015-06-20T03:57:51.207
2015-06-20T03:57:51.207
10150
10150
11518
answer