【发布时间】:2012-11-09 08:00:00
【问题描述】:
我是遵循 Michael Hartl 教程的新手程序员。
我即将完成第 9 章,其中添加了查看站点上所有用户并删除具有管理功能的单个用户的功能。
所有规格均已通过,一切都按预期在本地运行。然而,当我在 Heroku 测试网站时,用户的索引看起来与本地索引不同。
我尝试在推送到 Heroku 之前预编译资产,这解决了问题。但是,现在删除用户的功能不起作用。我没有删除用户,而是转发给了该用户。本地版本也是如此。此外,我注意到单击退出链接返回错误:
No route matches [GET] "/signout"
我所有的规格都还在通过,这只会让我更加神秘!我怀疑这是资产如何编译的问题,但作为一个 Rails 新手,感觉就像大海捞针,所以欢迎任何帮助。
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>
应用程序.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>
【问题讨论】:
-
jquery_ujs没有按照我的猜测进行 -
//= 要求 jquery_ujs 存在于 application.js 中?
-
您是否禁用了javascript?您发送的是用于注销的获取,而不是依赖于 javascript 的删除。
-
否则,只需删除 /public/assets 文件夹,如果您确信是预编译造成的。
-
@Amar '//= 需要 jquery_ujs' 存在于 application.js 中
标签: ruby-on-rails asset-pipeline precompile