1

私は、Michael Hartl チュートリアルに従っている初心者プログラマーです。

私は第 9 章を終了しようとしていました。これは、サイトのすべてのユーザーを表示し、管理機能を使用して個々のユーザーを削除する機能を追加するものです。

すべての仕様に合格し、すべてがローカルで期待どおりに機能していました。しかし、Heroku でサイトをテストしたところ、ユーザーのインデックスはローカルのインデックスとは異なって見えました。

Heroku にプッシュする前にアセットをプリコンパイルしようとしましたが、これで問題が解決しました。ただし、ユーザーを削除する機能が機能しなくなりました。ユーザーを削除する代わりに、そのユーザーに転送されました。ローカルバージョンでも同じことが起こりました。さらに、サインアウト リンクをクリックするとエラーが返されることに気付きました。

No route matches [GET] "/signout"

私のすべての仕様はまだ通過しているので、私にとっては謎が増えるだけです! アセットのコンパイル方法に問題があるのではないかと思いますが、Rails の初心者としては、干し草の山から針を探しているような気がするので、どんな助けも大歓迎です。

ルート.rb

Hooter::Application.routes.draw do

  resources :users
  resources :sessions, only: [:new, :create, :destroy]

  root to: 'static_pages#home'
  match '/help', to: 'static_pages#help'
  match '/about', to: 'static_pages#about'
  match '/contact', to: 'static_pages#contact'
  match '/signup', to: 'users#new'
  match '/signin', to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete

user_controller.rb

class UsersController < ApplicationController
  before_filter :signed_in_user, only: [:index, :edit, :update, :destroy]
  before_filter :correct_user, only: [:edit, :update]
  before_filter :admin_user, only: :destroy

  def new
    @user = User.new
  end

  def create
      @user = User.new(params[:user])
      if @user.save
        sign_in @user
        flash[:success] = "Welcome to the hooter App!"
        redirect_to @user
      else
        render 'new'
      end
  end

  def index
    @users = User.paginate(page: params[:page])
  end

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

  def edit
  end

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

    if @user.update_attributes(params[:user])
      flash[:success] = "Profile updated"
      sign_in(@user)
      redirect_to @user
    else
      render 'edit'
    end
  end

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User destroyed"
    redirect_to users_url
  end

  private

      def signed_in_user
        unless signed_in?
          store_location
          redirect_to signin_url, notice: "Please sign in."
        end
      end

      def correct_user
        @user = User.find(params[:id])
        redirect_to(root_path) unless current_user?(@user)
      end

      def admin_user
        redirect_to(root_path) unless current_user.admin?
      end
end

_header.html.erb

<header class="navbar navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container">
      <%= link_to "hooter", root_path, id: "logo" %>
      <nav>
        <ul class="nav pull-right">
          <li><%= link_to "Home",    root_path %></li>
          <li><%= link_to "Help",    help_path %></li>
            <% if signed_in? %>
                <li><%= link_to "Users", users_path %></li>
                <li id="fat-menu" 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", edit_user_path(current_user) %>
                        </li>
                        <li class="divider"></li>
                        <li>
                        <%= link_to "Sign out", signout_path, method: "delete" %>
                        </li>
                    </ul>
                </li>
            <% else %>
                <li><%= link_to "Sign in", signin_path %></li>
            <% end %>
        </ul>
      </nav>
    </div>
  </div>
</header>

アプリケーション.js

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

application.html.erb

<!DOCTYPE html>
<html>
  <head>
    <title><%= full_title(yield(:title)) %></title>
    <%= stylesheet_link_tag    "application", media: "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
    <%= render 'layouts/shim' %>    
  </head>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
          <% flash.each do |key, value| %>
            <div class="alert alert-<%= key %>"><%= value %></div>
          <% end %>
          <%= yield %>
          <%= render 'layouts/footer' %>
          <%= debug(params) if Rails.env.development? %>
        </div>
  </body>
</html>
4

3 に答える 3

1

ルート定義からのリクエストNo route matches [GET] "/signout"を効果的に受け入れないため、この問題は関連性があります。動詞である必要があります。GET/signoutDELETE

これは、javascriptライブラリが欠落しているために発生する可能性があります。欠落しているものがあるかどうかを確認できますか?

于 2012-11-09T08:08:13.580 に答える
0

このapplication.jsファイルを使用して試してください

application.js

//= require jquery
//= require jquery_ujs
//= require_tree .

あなたが読んでいるあなたの本の中で、見てください Listing 8.25.

ソース: http: //ruby.railstutorial.org/book/ruby-on-rails-tutorial?version = 3.2#sec-signin_upon_signup

于 2012-11-09T08:09:47.590 に答える
0

コメンターと部外者の助けを借りて、問題を解決することができました。

まず、public/assetsHeroku がコンパイルできるように、フォルダーを削除しました。

次に、インポートの//= require bootstrap下に移動しました。jquery

//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
于 2012-11-15T21:25:58.620 に答える