nfm*_*nfm 8 rest ruby-on-rails separator
我希望我的Rails 2.3.2应用程序响应并生成如下所示的URL:
/websites/asd.com
/websites/asd.com/dns_records/new
Run Code Online (Sandbox Code Playgroud)
在我的config/routes.rb中,我有:
map.resources :websites, :has_many => :dns_records
map.resources :dns_records, :belongs_to => :website
Run Code Online (Sandbox Code Playgroud)
然后我可以访问以下资源:
/websites/1
/websites/1/dns_records
Run Code Online (Sandbox Code Playgroud)
通过修改我的网站模型,我可以生成更好的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
Run Code Online (Sandbox Code Playgroud)
但是,对于包含"."的域名.人物,Rails变得不快乐.我相信这是因为'.' character在ActionController :: Routing :: SEPARATORS中定义,它列出了用于拆分URL的特殊字符.这允许你做像/websites/1.xml这样的东西.
那么,是否有一种干净的方式允许'.' RESTful URL中的字符?
我已经尝试重新定义ActionController :: Routing :: SEPARATORS以不包含'.',这是解决问题的一种非常糟糕的方法.这会通过在其中附加".:format"来混淆生成的URL.
我也知道我可以在我的config/routes.rb中添加:requirements => {:id => regexp}来匹配包含'.'的域名.(没有这个,params [:id]被设置为第一个'.'之前的域名部分),但这无助于RESTful生成URL /路径.
非常感谢:)尼克
解决了这个问题,非常感谢http://poocs.net/2007/11/14/special-characters-and-nested-routes(并参见http://dev.rubyonrails.org/ticket/6426了解更多参考)
我需要为每个嵌套路由添加 :requirements => { :website_id => regexp } ,该路由还将包含带句点的域名。
这是我的工作路线:
map.resources :websites, :requirements => { :id => /[a-zA-Z0-9\-\.]+/ } do |websites|
websites.with_options :requirements => { :website_id => /[a-zA-Z0-9\-\.]+/ } do |websites_requirements|
websites_requirements.resources :dns_records
end
end
<%= link_to 'New DNS Record', new_website_dns_record_path(@website) %>
# Produces the URL
/websites/asd.com/dns_records/new
Run Code Online (Sandbox Code Playgroud)
致电给
websites.with_options
Run Code Online (Sandbox Code Playgroud)
只是为了与 DRY 保持一致,因此不必为网站的所有嵌套路由指定 :requirements。所以我也可以有
websites_requirements.resources :accounts
websites_requirements.resources :monthly_bandwidth_records
etc.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2663 次 |
最近记录: |