Когда вы объявляете маршрут, способ его вызова требует определенного количества параметров, и они должны быть указаны в правильном порядке, иначе все может запутаться.
Вот несколько типичных маршрутов:
map.none '/', :controller => 'none', :action => 'index'
map.one '/:one_id', :controller => 'one', :action => 'show'
map.two '/:one_id/:two_id', :controller => 'two', :action => 'show'
map.three '/:one_id/:two_id/:three_id', :controller => 'three', :action => 'show'
Когда вы хотите вызвать их, вам нужно указать параметры, которые вы указали в маршруте, иначе он будет недействительным:
none_path
one_path(one)
two_path(one, two)
three_path(one, two, three)
Вы можете включить дополнительные параметры в конце. Обычно плохая идея смешивать и сочетать методы автоматической и ручной маршрутизации:
# Using named routes
one_path(one) # /one/1
one_path(one, :two_id => two) # /one/1?two_id=2
one_path(:one_id => one) # Awkward format for same
# Using automatic routing
url_for(:controller => 'one', :action => 'show', :one_id => one) # /one/1
Параметры пути в скобках, такие как (:format)
, являются необязательными, но их лучше избегать, кроме случаев, когда существуют безопасные значения по умолчанию.
Возможно, вы отключили метод url_for
, включив в свой маршрут два параметра вместо простого :id
.