我希望我的 Rails 2.3.2 应用程序能够响应并生成如下 URL:
/websites/asd.com
/websites/asd.com/dns_records/new
在我的 config/routes.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 之类的操作。
所以,有没有一种干净的方法来允许'。RESTful URL 中的字符?
我尝试将 ActionController::Routing::SEPARATORS 重新定义为不包含 '.',这是解决问题的完全错误的方法。这会通过向它们附加“.:format”来混淆生成的 URL。
我也知道我可以将 :requirements => { :id => regexp } 添加到我的 config/routes.rb 以匹配包含“。”的域名 (没有这个,params[:id] 被设置为第一个 '.' 之前的域名部分),但这无助于 RESTfully 生成 URL/路径。
非常感谢 :) 尼克