путаница с маршрутизацией - PullRequest
1 голос
/ 19 августа 2011

Я сейчас пробую restful_authentication в рельсах. Это мой файл rout.rb

ActionController::Routing::Routes.draw do |map|
map.logout '/logout', :controller => 'sessions', :action => 'destroy'
map.login '/login', :controller => 'sessions', :action => 'new'
map.register '/register', :controller => 'users', :action => 'create'
map.signup '/signup', :controller => 'users', :action => 'new'
map.resources :users
map.resource :session
map.resources :products

Это мой SessionsController, который обрабатывает вход и выход из системы

class SessionsController < ApplicationController

  # render new.erb.html
  def new
  end

  def create
    logger.error("Inside create")
    logout_keeping_session!
    user = User.authenticate(params[:login], params[:password])
    if user
      # Protects against session fixation attacks, causes request forgery
      # protection if user resubmits an earlier form using back
      # button. Uncomment if you understand the tradeoffs.
      # reset_session
      self.current_user = user
      new_cookie_flag = (params[:remember_me] == "1")
      handle_remember_cookie! new_cookie_flag
      redirect_back_or_default('/')
      flash[:notice] = "Logged in successfully"
    else
      note_failed_signin
      @login       = params[:login]
      @remember_me = params[:remember_me]
      render :action => 'new'
    end
  end

  def destroy
    logout_killing_session!
    flash[:notice] = "You have been logged out."
    redirect_back_or_default('/')
  end

protected
  # Track failed login attempts
  def note_failed_signin
    flash[:error] = "Couldn't log you in as '#{params[:login]}'"
    logger.warn "Failed login for '#{params[:login]}' from #{request.remote_ip} at #{Time.now.utc}"
  end
end

Я заметил, что нет никакого действия индекса. следовательно http://localhost:3000/sessions должен выдать неизвестную ошибку действия, и это произошло. Затем я перешел на страницу входа в систему, то есть: новое действие в sessioncontroller. Я посмотрел на форму отправки URL, и я обнаружил, что это enter image description here и при отправке URL, показанный в firebug, был enter image description here

Как URL перенаправил на правильное действие? т.е. http://localhost:3000/sessions до http://localhost:3000/sessions/new

1 Ответ

1 голос
/ 19 августа 2011

Ваша строка map.resource session автоматически создает маршруты отдыха, с действиями, соответствующими следующим:

Verb   Path           Action
------------------------------
GET    /session/new   new
POST   /session       create
GET    /session       show
GET    /session/edit  edit
PUT    /session       update
DELETE /session       destroy

Поскольку это единственный ресурс, все пути используют /session, а не /sessions, поэтомуGET запрос к /sessions не удастся.Кроме того, запрос GET на /session вызовет действие show, а не действие index (у единственного ресурса нет действия index).

Проверьте "«Особые ресурсы» в http://guides.rubyonrails.org/routing.html (это для Rails 3, но та же идея все еще применима).

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