Проблемы с "link_to" - PullRequest
       6

Проблемы с "link_to"

0 голосов
/ 24 мая 2011

НОВОЕ РЕДАКТИРОВАНИЕ

С 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

но мне действительно это не нравится. Я делаю что-то неправильно? Почему рельсы переносят контроллер и действие, но забывают об области?

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Попробуйте это

link_to "Show this case", [:area, @case]

РЕДАКТИРОВАТЬ (удалить двоеточие)

scope "/area" do
  resources :cases
end

РЕДАКТИРОВАТЬ 2

link_to "Show this case", case_path(@case, :area => :en)

Если вы указали area в качестве аргумента, вы всегда должны передавать его.

0 голосов
/ 24 мая 2011

Добавьте этот метод в ApplicationController:

def default_url_options(options={})
  {:area => params[:area]}
end

Вам не нужно вручную устанавливать параметр: area в ваших помощниках маршрутизации

...