Ruby on Rails: проблема маршрутизации: действие не замечено - PullRequest
1 голос
/ 28 октября 2010

Просто пытаюсь настроить некоторые базовые ссылки с помощью authlogic.здесь они

<% if current_user %>
    <div class="register_new_user">
        <%= link_to "Register", new_user_path %>
    </div>
    <div class="login_existing_user">
        <%= link_to "Log In", new_user_session_path %>
    </div>

<% else %>
    <div class="logout">
        <%= link_to "Log Out", :controller => :user_sessions, :action => :destroy %>
    </div>
<% end %>

, что также странно, что destroy_user_session_path не существует, и это то, что я предпочел бы использовать.Но когда я нажимаю ссылку выхода из системы, она просто приводит меня к localhost:3000/user_sessions/

, вот мой контроллер user_sessions:

class UserSessionsController < ApplicationController
  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => :destroy

  def new
    @user_session = UserSession.new
  end

  def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      flash[:notice] = "Login successful!"
      redirect_back_or_default account_url
    else
      render :action => :new
    end
  end

  def destroy
    current_user_session.destroy
    flash[:notice] = "Logout successful!"
    redirect_back_or_default new_user_session_url
  end
end

, поэтому я не понимаю, почему new_user_session_path работаети destroy_user_session_path нет.

для справки: мои маршруты:

  map.resource :user_session
  map.resource :account, :controller => "users"
  map.resources :users

  map.root :controller => "info", :action => "home"
  map.connect "/home", :controller => "info", :action => "home"

Ответы [ 3 ]

5 голосов
/ 28 октября 2010

Сделайте это на ваш взгляд:

<%= link_to "Log Out", user_session_path, :method => :delete %>

Причина, по которой вы не можете просто использовать метод destroy_user_session_path, заключается в том, что это будет запрос GET, который нарушает соглашение о маршрутизации RESTful. GET-запросы предназначены только для извлечения данных, а не для их создания, обновления или уничтожения.

Это должно исправить вашу проблему.

0 голосов
/ 28 октября 2010

Я думаю, что вы должны использовать вместо:

<%= link_to "Log Out", :controller => :user_session, :action => :destroy %>

Обратите внимание на контроллер в единственном числе ...

0 голосов
/ 28 октября 2010

Для ОБНОВЛЕНИЯ и УДАЛЕНИЯ необходимо указать метод в качестве параметра:

<%= link_to "Log Out", user_session_path, :method => :delete %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...