Rails роутинг в / store /: system /: title - PullRequest
1 голос
/ 20 апреля 2010

Я пока не могу понять маршрутизацию Rails. Я хочу иметь возможность связать сайт, например, с ... com / store / xbox360 / Mass Effect 2 (который является / store (мой контроллер) /: system /: title).

У меня есть записи в базе данных, которые включают переменные: system и: title (?). Как бы я направил их, чтобы показать и отфильтровать эти записи? Или это то, что мне нужно настроить в контроллере?

Ответы [ 2 ]

1 голос
/ 20 апреля 2010

Если вы следуете соглашениям о ресурсах RESTFUL, которые вы, возможно, захотите использовать:

map.resources :system, :has_many => :title, :path_prefix => '/store/'

Это создаст удобные небольшие маршруты, которые могут оказаться очень полезными:

system_title_index GET    /store/system/:system_id/title(.:format)          {:controller=>"title", :action=>"index"}
                   POST   /store/system/:system_id/title(.:format)          {:controller=>"title", :action=>"create"}
  new_system_title GET    /store/system/:system_id/title/new(.:format)      {:controller=>"title", :action=>"new"}
 edit_system_title GET    /store/system/:system_id/title/:id/edit(.:format) {:controller=>"title", :action=>"edit"}
      system_title GET    /store/system/:system_id/title/:id(.:format)      {:controller=>"title", :action=>"show"}
                   PUT    /store/system/:system_id/title/:id(.:format)      {:controller=>"title", :action=>"update"}
                   DELETE /store/system/:system_id/title/:id(.:format)      {:controller=>"title", :action=>"destroy"}
      system_index GET    /store/system(.:format)                           {:controller=>"system", :action=>"index"}
                   POST   /store/system(.:format)                           {:controller=>"system", :action=>"create"}
        new_system GET    /store/system/new(.:format)                       {:controller=>"system", :action=>"new"}
       edit_system GET    /store/system/:id/edit(.:format)                  {:controller=>"system", :action=>"edit"}
            system GET    /store/system/:id(.:format)                       {:controller=>"system", :action=>"show"}
                   PUT    /store/system/:id(.:format)                       {:controller=>"system", :action=>"update"}
                   DELETE /store/system/:id(.:format)                       {:controller=>"system", :action=>"destroy"}
                          /:controller/:action/:id  

Ваш URLвыглядят немного по-другому: /store/system/xbox360/title/Mass%20Effect

Не забудьте переопределить метод to_param в вашей системе и в моделях титров, чтобы id был действительным именем объекта, а не просто числом.

Надеюсь, это поможет!

0 голосов
/ 20 апреля 2010

добавьте следующее в ваши маршруты.rb и не забудьте перезапустить сервер

map.stores 'stores/:system/:title/:action/:id', :controller => 'stores'

затем следом за ур;

"com / store / xbox360 / Mass" вызовет ваш индексный метод контроллера магазинов.

где, params [: system] = "xbox360"
params [: Mass] = "Mass"

...