私は、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>