Маршрутный ресурс Rails 3 с параметром в качестве префикса - PullRequest
4 голосов
/ 18 января 2011

My rails 3 приложение работает в фоновом режиме Apache / mod_proxy сервер.

В приложении rails существует обязательный префикс :site_pin

В Apache у меня есть следующее, чтобы абстрагировать мой префикс:

ServerName example.com

ProxyRequests Off
<Proxy *>
    Order deny,allow
    Allow from all
</Proxy>

ProxyPass / http://localhost:3000/site/example/
ProxyPassReverse / http://localhost:3000/site/example/

<Location />
    Order allow,deny
    Allow from all
</Location>

В моем моем rout.rb у меня есть следующее:

resources :products

#RESTful fix
match 'site/:site_pin/:controller/', :action => 'index', :via => [:get]
match 'site/:site_pin/:controller/new', :action => 'new', :via => [:get]
match 'site/:site_pin/:controller/', :action => 'create', :via => [:post]
match 'site/:site_pin/:controller/:id', :action => 'show', :via => [:get]
match 'site/:site_pin/:controller/:id/edit', :action => 'edit', :via => [:get]
match 'site/:site_pin/:controller/:id', :action => 'update', :via => [:put]
match 'site/:site_pin/:controller/:id', :action => 'destroy', :via => [:delete]

Таким образом, все работает нормально, но у кого-нибудь есть лучшее решение для удаления этого исправления и для того, чтобы сделать route.rb более чистым?

1 Ответ

17 голосов
/ 19 января 2011

scope было бы очень эффективно для этого. Замените то, что вы разместили выше в вашем файле rout.rb:

scope 'site/:site_pin' do
  resources :products
end

Теперь запустите rake:routes in, и вы должны увидеть следующий вывод:

    products GET    /site/:site_pin/products(.:format)             {:controller=>"products", :action=>"index"}
             POST   /site/:site_pin/products(.:format)             {:controller=>"products", :action=>"create"}
 new_product GET    /site/:site_pin/products/new(.:format)         {:controller=>"products", :action=>"new"}
edit_product GET    /site/:site_pin/products/:id/edit(.:format)    {:controller=>"products", :action=>"edit"}
     product GET    /site/:site_pin/products/:id(.:format)         {:controller=>"products", :action=>"show"}
             PUT    /site/:site_pin/products/:id(.:format)         {:controller=>"products", :action=>"update"}
             DELETE /site/:site_pin/products/:id(.:format)         {:controller=>"products", :action=>"destroy"}

:site_pin будет доступно как params[:site_pin].

Естественно, вы сможете добавлять другие ресурсы и маршруты в блок области видимости; все из которых будут иметь префикс site/:site_pin.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...