2012-11-09 2 views
1

저는 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> 

//= require jquery_ujs 
//= require jquery 
//= require bootstrap 
//= require_tree . 
,745를 application.js

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

'jquery_ujs'는 – Amar

+0

// =이 application.js에 존재 jquery_ujs을 필요로 내 생각에 따라 따기되지 않는 이유는 무엇입니까? – Amar

+0

자바 스크립트를 사용 중지 했습니까? 당신은 서명 대신에 자바 스크립트에 의존하는 삭제 대신에 도착을 보내고 있습니다. –

답변

0

도움 commenters와 외부인으로부터 나는 그 문제를 해결할 수있었습니다.

먼저, public/assets 폴더를 삭제하여 Heroku에서 컴파일 작업을 수행 할 수있게했습니다.

그때 나는 그런 나의 jquery 수입 아래 //= require bootstrap 이동 :

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

효과적으로 당신의 경로 정의에서 /signoutGET 요청을 허용하지 않기 때문에이 문제 No route matches [GET] "/signout" 관련, 그것은 DELETE 동사해야합니다.

자바 스크립트 라이브러리가 없기 때문에 이러한 현상이 발생할 수 있습니다. 누락 된 부분이 있는지 확인할 수 있습니까?

+0

이것은 오류를 이해하는 데 도움이되었습니다. 감사합니다. 방금 내 질문에 application.js를 게시했습니다. 내 app/assets/javascripts 폴더에는 application.js, sessions.js.coffee, static_pages.js.coffee 및 users.js.coffee가 있습니다. –

+0

필요한 모든 라이브러리가 'application.js'에 포함 된 것처럼 보입니다. 그들은 HTML에로드했습니다. 템플릿에'<% = javascript_include_tag : defaults %>'코드가 있습니까? 태그에 있습니까? –

+0

내 ''태그에 '<% = javascript_include_tag "응용 프로그램"%> "이 있습니다.이 태그는 자습서에서 권장 한 것입니다. –

관련 문제