Ruby on Rails маршрутизация - PullRequest
2 голосов
/ 09 мая 2009

Я новичок в RoR и у меня есть вопрос о маршрутизации. Я установил приложение и простую систему входа пользователя (да, я знаю, что там уже есть генератор входа в систему, я просто хотел попробовать это для себя) У меня есть before_filter для определенного действия, которое проверяет, вошел ли пользователь в систему или нет. Если нет, он перенаправляет их на страницу входа. Вот как у меня это маршрутизируется, это выглядит правильно?

map.resources :user, :collection => { :login => :get }

также, почему, если я изменяю

:login => :get

до

:login => :post

отображает ли представление 'show'?

Ответы [ 3 ]

4 голосов
/ 09 мая 2009
map.resources :user, :collection => { :login => :get }

будет соответствовать URL-адресу типа "/ users / login"

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

будет соответствовать URL-адресу типа "/ users / 123 / login"

Поскольку: пользователь ссылается на ресурс, он будет отображать URL-адрес в действие в зависимости от метода запроса в дополнение к URL-адресу.

Итак, первый маршрут выше отобразит GET в / users / login для действия login, но когда вы изменяете его на: post, он затем сопоставляет GET с / users / login по умолчанию, который является контроллером 'users' и действием 'show' для пользователя с идентификатором 'login' - который то, что ты хочешь. (и он сопоставит POST с / users / login и действием 'login')

0 голосов
/ 09 мая 2009

Я бы рекомендовал использовать отдельный ресурс для вашей системы входа. Многие люди используют сессию, поэтому у вас будет

map.resource :session

Затем вы будете использовать обычные методы crud, такие как #new и #create, для отображения формы входа в систему и ее отправки соответственно. Вам также необходимо создать контроллер сеанса для обработки этих запросов.

0 голосов
/ 09 мая 2009

Это близко, но вы можете попробовать:

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

Их ключевое отличие состоит в том, что ключевое слово :collection следует использовать, когда ваш новый маршрут имеет дело с коллекциями этого ресурса (например, «индекс»), а не с одним экземпляром ресурса (например, ведение журнала одним пользователем) в).

Также, если /users/user_id/login перенаправляет на страницу входа, вы все еще выполняете там операцию GET. Когда вы отправляете форму, вы хотите использовать POST. Итак, по сути вы говорили Rails ожидать POST, когда он получал GET. Я могу только предположить, что он полностью игнорировал маршрут login и просто возвращал любого пользователя, который был представлен в URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...