Ну, я бы посоветовал вам лучше согласиться с тем, как Rails справляется с этим. Если вы все еще настаиваете на использовании таких «странных» URL-адресов и хотите игнорировать проблемы / головные боли, которые могут возникнуть при дальнейшей разработке, попробуйте использовать Refraction.
Я не хочу быть грубым, но в настоящее время мне кажется, что вы не поняли, почему спокойные URL-адреса такие, какие они есть. Пожалуйста, сначала поймите, что стоит за этим, а затем переосмыслите свое приложение / контроллер и дизайн маршрутизации. Бьюсь об заклад, вы будете просветлены.
В этом примере ваш URL, вероятно, должен быть /regions/1/payrolls
с map.resources :regions, :has_many => :payrolls
. Тогда ваш список заработной платы будет обработан PayrollsController
с params[:region_id]
- и это действительно имеет смысл (и, вероятно, то, что вы пытались достичь с помощью макета URL). Фрагмент кода:
def index
if params[:region_id]
@region = Region.find(params[:region_id])
@payrolls = @region.payrolls
else
@payrolls = Payroll.all
end
end
Если вы все еще хотите, чтобы ресурс имел другой URL-адрес, используйте следующее:
map.resources :regions do |regions|
regions.resources :tasks, :as => :payrolls
end
Это сопоставит вложенные ресурсы с контроллером задач, используя именованную часть URL "payrolls". Но это, вероятно, не работает так, как вы могли бы ожидать, потому что спокойная логика означает, что вы должны обработать модель заработной платы в PayrollsController
. В противном случае вы можете столкнуться со странно выглядящим кодом. Может быть, ваш дизайн TasksController
просто неверен? Rails, вероятно, ожидает, что задачи будут переданы вашему контроллеру задач, хотя вы называете его payrolls. По крайней мере, это может сбить с толку (однако на самом деле они не ожидают, что это модели задач, поэтому, вероятно, это сработает).
Кстати - имейте в виду: «restful» также означает, что ваше приложение должно отвечать на стандартные глаголы на ресурсе, а не просто использовать «находчивые» маршруты. Также речь идет о HTTP-глаголах GET, PUT, DELETE и POST, и, конечно, о действиях по умолчанию «edit», «new» и т. Д. Не пытайтесь сделать ваши контроллеры большими и сложными. Следуйте девизу "Тощие контроллеры - толстые модели".