2014-05-05 15 views
5

Im mới để sử dụng nền tảng và tôi đã tạo đơn giản viết ứng dụng sử dụng giàn giáo và tôi đã thực hiện các bước sau:Lỗi Routing trong ứng dụng đường ray 'uninitialized HomeController liên tục'

rails new blog 

sau đó thêm vào sau để Gemfile

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

và sau đó

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

Bây giờ ứng dụng chạy tốt @ host p địa phương ort 3000/bài enter image description here Nhưng khi tôi bấm vào nút 'Home' trong nav-bar nó tạo ra lỗi: enter image description here

application.html.erb tập tin: file

<!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 :

<%# 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> 

tập tin routes.rb của tôi:

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 

Tôi thiếu gì ?.

+1

Bạn có một HomeController không? – Iceman

+0

@iceman không có gì nên được xác định trong đó? – PallavSharma

+1

Bạn đang root URL '/' của mình thành HomeController. Chạy 'rails g controller home index' và sau đó thử lại. – Iceman

Trả lời

6

vấn đề của bạn là dòng này ở đây:

root :to => "home#index" 

Trong tập tin routes.rb.

Điều này cho ứng dụng của bạn biết rằng URL gốc (vì vậy http: //: 3000/URL) nên tìm một bộ điều khiển có tên là 'home' với hành động 'index'.

Để làm việc này, bạn sẽ cần phải có một HomeController.rb trong thư mục ứng dụng/bộ điều khiển của bạn và bên trong đó một def cho 'index'.

tôi khuyên bạn nên chạy lệnh này

rails generate controller home index 

Để tạo bộ điều khiển nhà. Nhiều hướng dẫn sẽ cung cấp cho bạn dòng này để chạy TRƯỚC KHI bạn chạy lệnh giàn giáo.

+0

Tôi đã làm ngay bây giờ tôi nhận được thông báo này khi tôi truy cập nút 'home' này: Home # index Tìm tôi trong ứng dụng/views/home/index.html.erb Về cơ bản tôi muốn hiển thị trang chỉ mục để khi nhấp vào nút trang chủ nó hiển thị tất cả các bài đăng. – PallavSharma

+0

Tốt. Điều này có nghĩa là trang bạn đang xem là trang Home Controller mặc định. Bạn có hai lựa chọn ở đây. Tùy chọn 1: Tôi khuyên bạn nên làm theo hướng dẫn tại đây: http://guides.rubyonrails.org/v3.2.13/getting_started.html. Bây giờ bạn đã thực hiện tất cả các bước lên đến 6.2 Thêm liên kết. Phần 6.2 sẽ cho bạn biết cách liên kết đến một trang với tất cả các bài đăng. –

+1

Tùy chọn 2: (Không khuyến khích) Nếu bạn muốn dùng phím tắt, hãy thay đổi tệp routes.rb của bạn như sau: root: to => "posts # index" và/URL sẽ hiển thị cho bạn trình điều khiển bài đăng –

1

@PallavSharma, hãy để tôi cung cấp cho bạn một số thông tin để giúp bạn:

Khi bạn tạo routes.rb, bạn về cơ bản nói Rails mà domain.com/route sẽ "lộ trình" mà controller#action

Sự cố bạn gặp phải là bộ điều khiển đã nêu (home) không tồn tại. Và cũng không nên - nó sẽ là một bộ điều khiển khác với hầu như không có ý nghĩa trong phần còn lại của ứng dụng của bạn.Nếu bạn muốn có một con đường tùy chỉnh root, chúng ta thường chỉ là ApplicationController như thế này:

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

Điều này cho phép bạn thiết lập như sau:

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

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

Mặc dù nó có thể là hợp lý, hoặc thậm chí thực hành tốt nhất, để sử dụng posts#index làm chỉ mục; nó có nghĩa là bạn sẽ phải sử dụng các bài viết index view cho ngôi nhà của bạn, cũng như posts/index. Bằng cách sử dụng application#home, nó mang lại cho bạn sự linh hoạt hơn, đặc biệt hữu ích trong các ứng dụng lớn

+1

cảm ơn vì đã chia sẻ thông tin hữu ích này với tôi. :) – PallavSharma

+1

Không sao, hy vọng nó sẽ giúp –

Các vấn đề liên quan