Rails маршрутизация запроса функций контроллера - PullRequest
1 голос
/ 13 мая 2010

Итак, у меня есть контроллер Users, и у него есть (среди прочего) функция с именем details.

Идея состоит в том, что пользователь может перейти к LOCALHOST: 3000 / пользователь /: user_id / Детали и сможете просмотреть детали: user_id.

Например, у меня есть пользователь с именем «тестер». Когда я иду в Ури: http://localhost:3000/users/tester/details Я бы хотел, чтобы функция деталей вызывалась, отображала подробности и отображала информацию для пользователя-тестера.

Но вместо этого я получаю сообщение о том, что

No action responded to tester. Actions: change_password, create, current_user, details, forgot_password, index, login_required, new, redirect_to_stored, show, and update_attributes

И я понимаю, что по сути это означает, что если я хочу получить доступ к деталям, я действительно должен использовать

http://localhost:3000/users/details

Кроме того, что это на самом деле тоже не работает ...>. < Это вместо этого приводит меня к http://localhost:3000/users/details/registries (это путь по умолчанию, который я предусмотрел для любого, кто пытается просмотреть users/:user_id, так что, опять же, это работает так, как я хотел)

Дело в том: может ли кто-нибудь помочь и сказать мне, как я могу получить users/:user_id/details работать так, как я хочу, и отображать детали: user_id?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 13 мая 2010

Используете ли вы ресурсы? Если ваши маршруты выглядят так:

map.resources :users

Вы можете сделать это:

map.resources :users, :member => { :details => :get }

Это позволит получать запросы GET для URL / users /: id / details

Подробнее здесь: http://guides.rubyonrails.com/routing.html#customizing-resources

0 голосов
/ 13 мая 2010

Я думаю, что ваша проблема с настройкой маршрутов таким образом, что вместо :user_id у вас есть :login (или что-то еще) в URL /users/tester вместо /users/34. Вероятно, вам стоит взглянуть на to_param ( 1-й пример , 2-й пример , 3-й пример ).

Если вы хотите иметь другую опцию в маршрутах (помимо маршрутов REST по умолчанию), вы можете добавить :member => {:details => :get}, если вы используете map.resources (ответ @dylanfm), или просто отобразить ее, как в ответе @Salil.

0 голосов
/ 13 мая 2010

Чтобы получить маршруты типа «пользователи /: идентификатор_пользователя / подробности», измените следующие в маршрутах

map.users 'users/:user_id/details', :controller => 'users', :action=>'details'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...