Rails: ресурсы для неортодоксальных URL? - PullRequest
0 голосов
/ 24 сентября 2010

Мне бы хотелось, чтобы URL был таким:

/ начисления заработной платы / регион / 1

и мне бы хотелось, чтобы он отображался в функции payroll_list контроллера задач. Я также хотел бы использовать REST. Какой лучший способ сделать это?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Ну, я бы посоветовал вам лучше согласиться с тем, как 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» и т. Д. Не пытайтесь сделать ваши контроллеры большими и сложными. Следуйте девизу "Тощие контроллеры - толстые модели".

0 голосов
/ 24 сентября 2010

ОК, так что лучший вопрос, тогда может быть такой:

Как я могу получить это, чтобы я использовал ваше предложение:

/ регионы / 1 / зарплатные

и получите эту карту с удовольствием:

Контроллер задач с индексом, новым и т. Д. С префиксом "payroll _"?

Например: TasksController # payroll_index или TasksController # payroll_new

...