Вы смешиваете две разные концепции маршрутизации. Один из них - маршруты RESTful (читайте об этом в Google), а другой - общий / общий маршрут. Вы должны использовать только один из них. Рекомендуется RESTful (map.resources :recipes
). Но сначала вам нужно решить, какой из них использовать.
Плюс это определение неверно:
map.connect ':controller/:action/:id/:title', :controller => "recipes"
У вас есть: контроллер переменной в маршрутах, а затем вы говорите, что: контроллер должен быть привязан к «рецептам». Один из способов исправить это:
map.connect '/recipes/:action/:id', :controller => "recipes"
или лучше
map.connect '/recipes/:id/:action', :controller => "recipes"
и вы приближаетесь к RESTful-маршрутам.
Если вы хотите использовать заголовок в своих маршрутах, используйте именованный маршрут в сочетании с ресурсом RESTful. Но не смешивайте :id
и :title
в одном маршруте. Используйте только один параметр (или оба вместе, но это другая история).
map.resources :recipes, :except => [:show]
map.recipe '/recipe/:title', :controller => 'recipes', :action => 'show'
И вам, вероятно, потребуется переопределить метод to_param
в вашей Recipe
модели:
def Recipe < ActiveRecord::Base
def to_param
title
end
end