我是Michael Hartl教程之后的新手程序员。
我即将完成第9章,它增加了查看网站上所有用户的功能,并删除了具有管理功能的个人。
所有规格都在传递,一切都按预期在本地运行。但是,当我在Heroku测试该站点时,用户的索引看起来与本地索引不同。
我尝试在推送到Heroku之前预先编译资产,这已经解决了问题。但是,现在删除用户的功能不起作用。我没有删除用户,而是转发给该用户。本地版本也是如此。此外,我注意到单击注销链接返回错误:
No route matches [GET] "/signout"
我的所有规格仍在传递,这对我来说只是一个谜!我怀疑这是资产如何编译的问题,但作为一个铁杆新手,感觉就像在大海捞针寻找,所以任何帮助都是受欢迎的。
的routes.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>
的application.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>
答案 0 :(得分:1)
此问题No route matches [GET] "/signout"
是相关的,因为您实际上不接受GET
上的/signout
请求,您的路由定义应该是DELETE
动词。
这可能是因为缺少javascript库,你能检查一下是否丢失了吗?
答案 1 :(得分: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
答案 2 :(得分:0)
在评论者和外人的帮助下,我设法解决了这个问题。
首先,我删除了public/assets
文件夹,这使得Heroku可以进行编译。
然后我将//= require bootstrap
移到我的jquery
导入下面:
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .