link_to从rails2到rails3的不同行为

时间:2012-02-16 09:29:52

标签: ruby-on-rails-3

在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

1 个答案:

答案 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可用的任何位置使用命名路由助手(即控制器,邮件程序等)