2014-05-05 9 views
5

Im neuen Fundament zu verwenden, und ich habe einfach Beiträge App erstellt Gerüst mit und ich habe folgende Schritte:Routing-Fehler in Schienen-app ‚nicht initialisierte Konstante Homecontroller‘

rails new blog 

dann wie folgt ergänzt

Gemfile
gem 'foundation-rails' 
group :development do 
    gem 'rails_layout' 
end 

und dann

$ bundle install 
$ rails generate layout:install foundation5 --force 
$ rails g scaffold Post title desc:text 
$ rake db:migrate 

Jetzt läuft App fein @ localhost p ort 3000/Beiträge enter image description here Aber wenn ich auf die Schaltfläche 'Home' klicken in nav-bar es erzeugt Fehler: enter image description here

application.html.erb Datei:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title><%= content_for?(:title) ? yield(:title) : "Found Rails" %></title> 
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "Found Rails" %>"> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%# Modernizr is required for Zurb Foundation %> 
    <%= javascript_include_tag 'vendor/modernizr' %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
    </head> 
    <body> 
    <header> 
     <%= render 'layouts/navigation' %> 
    </header> 
    <main role="main"> 
     <%= render 'layouts/messages' %> 
     <%= yield %> 
    </main> 
    </body> 
</html> 

_navigation.html.erb Datei :

<%# navigation styled for Zurb Foundation 5 %> 
<nav class="top-bar" data-topbar> 
    <ul class="title-area"> 
    <li class="name"><%= link_to 'Home', root_path %></li> 
    <li class="toggle-topbar menu-icon"><a href="#">Menu</a></li> 
    </ul> 
    <div class="top-bar-section"> 
    <ul> 
     <%= render 'layouts/navigation_links' %> 
    </ul> 
    </div> 
</nav> 

Meine routes.rb Datei:

Rails.application.routes.draw do 
    resources :posts 
    root :to => "home#index" 

    # The priority is based upon order of creation: first created -> highest priority. 
    # See how all your routes lay out with "rake routes". 

    # You can have the root of your site routed with "root" 
    # root 'welcome#index' 

    # Example of regular route: 
    # get 'products/:id' => 'catalog#view' 

    # Example of named route that can be invoked with purchase_url(id: product.id) 
    # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 

    # Example resource route (maps HTTP verbs to controller actions automatically): 
    # resources :products 

    # Example resource route with options: 
    # resources :products do 
    #  member do 
    #  get 'short' 
    #  post 'toggle' 
    #  end 
    # 
    #  collection do 
    #  get 'sold' 
    #  end 
    # end 

    # Example resource route with sub-resources: 
    # resources :products do 
    #  resources :comments, :sales 
    #  resource :seller 
    # end 

    # Example resource route with more complex sub-resources: 
    # resources :products do 
    #  resources :comments 
    #  resources :sales do 
    #  get 'recent', on: :collection 
    #  end 
    # end 

    # Example resource route with concerns: 
    # concern :toggleable do 
    #  post 'toggle' 
    # end 
    # resources :posts, concerns: :toggleable 
    # resources :photos, concerns: :toggleable 

    # Example resource route within a namespace: 
    # namespace :admin do 
    #  # Directs /admin/products/* to Admin::ProductsController 
    #  # (app/controllers/admin/products_controller.rb) 
    #  resources :products 
    # end 
end 

Was fehlt mir ?.

+1

Haben Sie einen HomeController? – Iceman

+0

@iceman nein, was sollte in diesem definiert werden? – PallavSharma

+1

Sie rooten Ihre '/' URL zu einem HomeController. Führen Sie 'rails g controller home index' aus und versuchen Sie es erneut. – Iceman

Antwort

6

Ihr Problem ist, diese Zeile hier:

root :to => "home#index" 

In der routes.rb Datei.

Dies teilt Ihrer Anwendung mit, dass die Stamm-URL (also die http: //: 3000/URL) nach einem Controller namens "home" mit einer Aktion "index" suchen soll.

Damit dies funktioniert, müssten Sie einen HomeController.rb in Ihrem app/controllers-Ordner und darin ein def für 'index' haben.

Ich empfehle Sie diesen Befehl ausführen

rails generate controller home index 

die Heimsteuerung zu erzeugen. In vielen Lernprogrammen erhalten Sie diese Zeile, bevor Sie den Befehl scaffold ausführen.

+0

Ich tat es jetzt, ich habe diese Nachricht, wenn ich diesen Home-Button besuche: Home # index Finden Sie mich in app/views/home/index.html.erb Grundsätzlich möchte ich Index-Seite zeigen, so dass beim Klicken auf Home-Taste Es zeigt alle Beiträge. – PallavSharma

+0

Gut. Dies bedeutet, dass die Seite, die Sie sehen, die Standard-Home-Controller-Seite ist. Sie haben hier zwei Möglichkeiten. Option 1: Ich schlage vor, das Tutorial hier zu folgen: http://guides.rubyonrails.org/v3.2.13/getting_started.html. Sie haben nun alle Schritte bis zum 6.2 Hinzufügen eines Links durchgeführt. Abschnitt 6.2 zeigt Ihnen, wie Sie auf eine Seite mit allen Beiträgen verlinken. –

+1

Option 2: (Nicht empfohlen) Wenn Sie eine Verknüpfung verwenden möchten, ändern Sie Ihre routes.rb-Datei für Folgendes: root: to => "posts # index" und die/URL zeigt Ihnen die Beiträge Controller –

1

@PallavSharma, lassen Sie mich Ihnen ein paar mehr Informationen, Ihnen zu helfen:

Wenn Sie routes.rb erstellen, sind Sie im Grunde sagen, Rails, die domain.com/route auf "Route" wird sich die controller#action

Das Problem, das Sie haben, ist, dass Ihr angegebener Controller (home) nicht existiert. Und noch sollte es - es wird ein anderer Controller mit fast keiner Bedeutung in den Rest Ihrer App sein.Wenn Sie einen benutzerdefinierten root Weg wollen wir in der Regel nur die ApplicationController wie folgt aus:

#config/routes.rb 
root to: "application#home" 

Auf diese Weise können Sie Folgendes einstellen:

#app/controllers/application_controller.rb 
def home 
    @posts = Post.index #-> whatever you want here 
end 

#app/views/application/home.html.erb 
<!-- your code here --> 

Obwohl es logisch sein könnte, oder sogar beste Praxis zu Verwenden Sie posts#index als Index; es bedeutet, dass Sie die Beiträge index view für Ihr Haus sowie posts/index verwenden müssen. Durch die Verwendung von application#home, gibt es Ihnen viel mehr Flexibilität, besonders nützlich in großen Anwendungen

+1

danke für das Teilen dieser nützlichen Informationen mit mir. :) – PallavSharma

+1

Kein Problem, hoffe es hilft –