Rails:Michael Hartl教程第8章 - 无法删除会话

时间:2017-06-29 13:18:51

标签: ruby-on-rails session railstutorial.org

在Michael Hartl的Ruby on Rails教程(第8章)中实现会话时,我似乎无法使用方法删除的link_to标记来工作。

我要做的是删除本章中创建的cookie,并将用户重定向到主页。我使用Cloud 9 / C9作为IDE。

这是点击上述链接时控制台/服务器日志上出现的内容:

Started DELETE "/logout" for 86.42.8.216 at 2017-06-29 12:24:57 +0000
Cannot render console from 86.42.8.216! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by SessionsController#delete as HTML
  Parameters: {"authenticity_token"=>"dwH+Eu3big+otJ5nO9dzfJstEVLWSSIr1QrWQQ+g9WD7EdgHkUBVusE3Q1SBHh+SRIOsbNDH8WJwBGGoaZ9Xng=="}
No template found for SessionsController#delete, rendering head :no_content
Completed 204 No Content in 19ms (ActiveRecord: 0.0ms)

这是我的控制器:

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def show
    @user = User.find(params[:id])
  end

  def create
    @user = User.new(user_params) # Essentially passing in as argument the
                                  # created user's attributes (name, email, etc)
    if @user.save
      # Handle a successful save.
      redirect_to user_url(@user) # Using the named route 'user_URL' method 
                                  # to display show page for users, and passing 
                                  # in the user that was just created.
      flash[:success] = "Welcome to the Sample App!"
      log_in @user # Encrypts the ID of this newly created user. Refer to 
                   # SessionHelper file
    else
      render 'new'
    end
  end

  def destroy
    log_out
    redirect_to root_url
  end


  private

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
end

路线:

Rails.application.routes.draw do



  get 'sessions/new'

  root 'static_pages#home'
  get '/help', to: 'static_pages#help'
  get  '/about', to: 'static_pages#about'
  get  '/contact', to: 'static_pages#contact'

  get '/signup', to: 'users#new'
  post '/signup', to: 'users#create'

  get 'login', to: 'sessions#new'
  post 'login', to: 'sessions#create'
  delete 'logout', to: 'sessions#delete'


  # The following resounces method/keyword creates vitural URLs (/users e.g) and
  # maps them to controller actions. This also makes the named routes for 
  # these controllers/actions available

  resources :users

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html


end

视图(标题)

<header class="navbar navbar-fixed-top navbar-inverse">
  <div class="container">
    <%= link_to "sample app", root_path, id: "logo" %>
    <nav>
      <ul class="nav navbar-nav navbar-right">
        <li><%= link_to "Home", root_path %></li>
        <li><%= link_to "Help", help_path %></li>
        <% if logged_in? %>
          <li><%= link_to "Users", '#' %></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
              Account <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
              <li><%= link_to "Profile", current_user %></li>
              <li><%= link_to "Settings", '#' %></li>
              <li class="divider"></li>
              <li>
                <%= link_to "Log out", logout_path, method: :delete %>
              </li>
            </ul>
          </li>
        <% else %>
          <li><%= link_to "Log in", login_path %></li>
        <% end %>
      </ul>
    </nav>
  </div>
</header>

我搜索了相关的问题,其中的答案提出了Rail的application.html.erb文件和application.js文件,因此我将发布它们:

Application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title> <%= full_title(yield (:title)) %> </title>
    <%= csrf_meta_tags %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
    <!--[if lt IE 9]>
      <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js">
      </script>
    <![endif]-->
  </head>

  <body>

    <!-- Header -->
    <%= render 'layouts/header' %>



    <!-- Body -->
    <div class="container">

      <% flash.each do |message_type, message| %>
        <div class="alert alert-<%= message_type %>">
          <%= message %>
        </div>
      <% end %>


      <%= yield %>
    </div>

    <!-- Footer -->

    <%= render 'layouts/footer' %>

    <!-- Display debug information -->
    <%= debug(params) if Rails.env.development? %>

  </body>
</html>

的application.js

//= require jquery
//= require bootstrap
//= require jquery_ujs
//= require turbolinks
//= require_tree .

非常感谢任何帮助或建议。

1 个答案:

答案 0 :(得分:0)

从用户控制器剪切您的注销方法并将其粘贴到会话控制器

sessions_controller.rb

 def destroy
  log_out
  redirect_to root_url
 end