рельсы 3 динамических маршрута - PullRequest
0 голосов
/ 08 апреля 2011

Приложение, над которым я работаю в Rails 3, имеет модель City.У каждого города есть столбец «имя».Я хочу, чтобы этот City.name был базовым URL.

Например, с названием города "Лос-Анджелес": http://myapp.com/los-angeles.

Если я использую

match '/:name' => "cities#show"
resources :cities

, я могу получить http://myapp.com/Los%20Angeles,, но янужно, чтобы это было «Лос-Анджелес».Я предполагаю, что мне нужно изменить to_params в файле city.rb.

Кроме того, как должен выглядеть мой link_to, когда это работает?Прямо сейчас я пытаюсь

 <%= link_to "View", city_path(:name => @city.name) %>

И это дает мне эту ошибку:

No route matches {:action=>"destroy", :name=>"Los Angeles", :controller=>"cities"}

Наконец, вы должны заметить, что я планирую вложить ресурсы под городом в маршруты, чтобыВ итоге я получаю URL-адреса, такие как http://myapp.com/los-angeles/messages/message-content-using-to-param

и т. Д.

Буду очень признателен за любой совет, который вы можете дать!

Ответы [ 2 ]

1 голос
/ 09 апреля 2011

Метод , описанный здесь , будет одним из подходов.Переопределение to_param также описано в документации Rails .

Добавьте это к вашей модели города.

def to_param
    "#{self.name_for_url}" 
end

def name_for_url
    self.name.gsub(/^A-Z0-9\-_/i,'')
end

Это заставит city_path(@city) предоставить /cities/los-angeles

Если вы хотите, чтобы City был вашим корневым контроллером, в router.rb:

map.root :controller => 'city'

Теперь http://myapp.com/los-angeles должен работать.

1 голос
/ 08 апреля 2011

Лично я использую Friendly Id для обработки симпатичных URL-адресов с помощью хуков в ActiveRecord (кстати, очень приятно).Этот драгоценный камень также имеет поддержку вложенных ресурсов.

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