在rails2中,我能够得到这样的代码:
link_to(user.company.name, user.company)
将映射到:
/companies/id
但在rails 3中,同一行代码会引发错误说明:
undefined method `user_companies_path'
显而易见的解决方法是执行以下操作:
link_to(user.company.name, company_path(user.company))
但我想知道是否有人可以解释改变背后的原因?逻辑似乎更清晰。
编辑:添加路线样本
在rails2中,我的路线看起来像:
map.resources :users, :except => :edit, :member => { :details => :get }
map.resources :companies, :except => :edit, :member => { :details => :get }
在rails3中,我的路线是:
resources :users, :except => :edit do
member do
get :details
end
end
resources :companies, :except => :edit do
member do
get :details
end
end
答案 0 :(得分:0)
简短的回答是,Rails 3路由API将您的应用程序基于资源,这就是使用这些RESTful路由的原因,也意味着它可以执行支持约束等操作。
在Rails 2中,您可以:
resources :cars do
resource :models
member do
post :year
end
collection do
get :details
end
end
在Rails 3中,您可以:
map.resources :cars, :member => {:year => :post}, :collection => {:details => :get} do |cars|
cars.resource :model
end
您还可以使用:as
密钥,这意味着您可以在url_for
可用的任何位置使用命名路由助手(即控制器,邮件程序等)