НОВОЕ РЕДАКТИРОВАНИЕ
С resources :cases
в routes.rb
все эти помощники маршрутизации работают должным образом (c является экземпляром модели Case):
cases_path # Index action
new_case_path # New action
case_path(c) # Show action
edit_case_path(c) # Edit action
Изменение routes.rb
на это:
scope "/:area" do
resources :cases
end
сбой двух помощников по маршрутизации (см. Ошибку ниже):
cases_path # OK
new_case_path # OK
case_path(c) # Fail
edit_case_path(c) # Fail
Чтобы это работало, мне нужно поменять двух последних помощников в:
cases_path # OK
new_case_path # OK
case_path(c, :area => params[:area]) # OK
edit_case_path(c, :area => params[:area]) # OK
Почему нет необходимости отдавать: площадь первым двум помощникам и нужны вторые два? Это делает код запутанным ...
СТАРЫЙ ВОПРОС
Изначально у меня были такие маршруты. Rb:
resources :cases
и я мог бы сгенерировать ссылки этого типа
example.com/cases/3
, чтобы показать случай с ID = 3 с:
link_to("Show this case", @case)
Затем я изменил route.rb на:
scope "/:area" do
resources :cases
end
конец ссылки выше приведёт к ошибке
No route matches {:action=>"show", :controller=>"cases", :area=>#<Case id: 2,
Похоже, что rails не получает область: из параметров автоматически. Я мог бы исправить это, заставив область создать ссылку с
link_to("Show this case", case_path(params[:area], @item))
чтобы получить ссылку на
example.com/area1/cases/3
но мне действительно это не нравится. Я делаю что-то неправильно? Почему рельсы переносят контроллер и действие, но забывают об области?