Я хочу, чтобы мое приложение Rails 2.3.2 отвечало и генерировало URL-адреса следующим образом:
/websites/asd.com
/websites/asd.com/dns_records/new
В моем config / rout.rb у меня есть:
map.resources :websites, :has_many => :dns_records
map.resources :dns_records, :belongs_to => :website
Затем я могу получить доступ к таким ресурсам, как:
/websites/1
/websites/1/dns_records
Изменяя модель моего веб-сайта, я могу создавать лучшие URL-адреса, например:
class Website < ActiveRecord::Base
def to_param
domain_name
end
...
end
# app/views/websites/index.erb
<% @websites.each do |w| %>
<%= link_to "Show #{w}", website_path(w) %>
<% end %>
# Produces a link to:
/websites/example_without_periods_in_name
Однако для доменных имен, содержащих «.» персонажи, Rails становится несчастным. Я считаю, что это потому, что "." символ определяется в ActionController :: Routing :: SEPARATORS, в котором перечислены специальные символы для разделения URL-адреса. Это позволяет вам делать такие вещи, как /websites/1.xml.
ТАК, есть ли чистый способ разрешить '.' символы в URL-адресах RESTful?
Я попытался переопределить ActionController :: Routing :: SEPARATORS, чтобы он не включал «.», Что является абсолютно плохим способом решения проблемы. Это портит сгенерированные URL, добавляя к ним «.: Format».
Я также знаю, что могу добавить: needs => {: id => regexp} в мой config / rout.rb, чтобы соответствовать имени домена, которое включает в себя '. (без этого params [: id] устанавливается на часть имени домена перед первым '.'), но это не помогает при генерации URL / путей RESTful.
Большое спасибо :)
Ник