link_to различное поведение от rails2 к rails3 - PullRequest
0 голосов
/ 16 февраля 2012

В rails2 у меня был такой код:

link_to(user.company.name, user.company)

который будет сопоставлен с:

/companies/id

но в рельсах 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 голосов
/ 16 февраля 2012

Короткий ответ заключается в том, что API маршрутизации Rails 3 основывает ваше приложение на ресурсах, поэтому эти маршруты RESTful используются, а также означает, что он выполняет такие функции, как ограничения поддержки.

В Rails 2 вы'do do:

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 доступно (т.е. контроллеры, почтовые программы и т. д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...