redirect_to и: controller,: действия запутываются в Rails - PullRequest
0 голосов
/ 19 декабря 2009

В контроллере Rails я вызываю это:

redirect_to :controller => "user", :action => "login" 

My user_controller.rb определяет следующий метод:

class UserController < ApplicationController
  def login
  ###
  end

Когда я вызываю мой метод redirect_to, я получаю эту ошибку в своем браузере: No action responded to show. Проверка журналов сервера Я вижу эту строку:

Processing UserController#show (for 127.0.0.1 at 2009-12-19 12:11:53) [GET] 
  Parameters: {"action"=>"show", "id"=>"login", "controller"=>"user"} 

Наконец, у меня есть эта строка в моем routes.rb

map.resources :user

Есть идеи, что я делаю не так?

Ответы [ 4 ]

1 голос
/ 19 декабря 2009

Хак-й ответ - изменить следующую строку в вашем маршруте. Rb

map.resources :user

до

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

Но это плохо по ряду причин - в основном потому, что это нарушает парадигму RESTful. Вместо этого вы должны использовать SessionController и использовать sessions/new для входа. Вы можете присвоить ему псевдоним /login, используя следующую строку в routs.rb

map.login 'login', :controller=>"sessions", :action=>"new"

0 голосов
/ 20 декабря 2009

В итоге я создал новый login_controller для обработки логинов.

Вот соответствующий бит из моего файла rout.rb:

map.login '/login', :controller => 'login', :action => 'login'

Спасибо за вашу помощь ...

0 голосов
/ 19 декабря 2009

Вам необходимо добавить действие login в вашем rout.rb. См. это превосходное руководство .

0 голосов
/ 19 декабря 2009

Пытались

redirect_to :url => {:action => 'login', :controller => 'user'}

Или, возможно, вам придется удалить маршрут или написать свой. Карты маршрутизации POST для создания, PUT для обновления и т. Д.

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