2012-01-14 23 views
19

Tôi vừa tạo ứng dụng đường ray mới trong Rails 3.1.1 và bố cục ứng dụng của tôi không được hiển thị trong trình duyệt. Thứ duy nhất được hiển thị là mã mà tôi đặt trong các khung nhìn (ví dụ: views/public/home.html.erb).Đường ray không hiển thị bố cục ứng dụng của tôi

Nó chỉ hiển thị những gì đang được dẫn đường qua <% = yield%>. Ví dụ, localhost: 3000/public/home là chỉ hiển thị này:

<h1>Homepage</h1> 
<h2>Here we go.</h2> 

<a href="/#">Visit the login page</a> 

Dưới đây là những gì trong /layouts/application.html.erb tôi:

<!DOCTYPE html> 
<html> 
<head> 
    <title>My App</title> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag "application" %> 
    <%= csrf_meta_tags %> 
</head> 
<body> 

    <ul class="user_nav"> 
    <% if current_user %> 

     <li> 
     Logged in as <%= current_user.email %>. 
     </li> 
     <li> 
     <%= link_to "Log out", logout_path %> 
     </li> 
    <% else %> 
     <li> 
     <%= link_to "Sign up", signup_path %> 
     </li> 
     <li> 
     <%= link_to "Log in", login_path %> 
     </li> 
    <% end %> 
    </ul> 


    <% flash.each do |name, msg| %> 
    <%= content_tag :div, msg, :id => "flash#{name}" %> 
    <% end %> 

    <%= yield %> 

    <h1>test!</h1> 


</body> 
</html> 

Dưới đây là tuyến đường của tôi cũng như:

root :to => "public#home" 
    match "/secret" => "public#secret" 


    get "logout" => "sessions#destroy", :as => "logout" 
    get "login" => "sessions#new", :as => "login" 
    get "signup" => "users#new", :as => "signup" 
    resources :users 
    resources :sessions 

Dưới đây là những gì trong application_contoller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

end 

Dưới đây là những gì trong public_controller.rb:

class PublicController < ActionController::Base 
    protect_from_forgery 

    def home 
    end 

    def secret 
    end 
end 

Dưới đây là những gì trong sessions_contoller.rb:

class SessionsController < ApplicationController 
    def new 
    end 

    def create 
    user = login(params[:email], params[:password], params[:remember_me]) 
    if user 
     redirect_back_or_to root_path, :notice => "Logged in!" 
    else 
     flash.now.alert = "Email or password was invalid" 
     render :new 
    end 
    end 

    def destroy 
    logout 
    redirect_to root_path, :notice => "Logged out" 
    end 
end 

Và đây là những gì trong users_controller.rb:

class UsersController < ApplicationController 
    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     redirect_to root_path, :notice => "Signed up!" 
    else 
     render :new 
    end 
    end 

end 
+0

Ngoài ra, tôi đã bắt đầu thiết lập Ma thuật và hiển thị ứng dụng tại phiên/mới, nhưng không hiển thị trên trang chủ công khai của tôi. –

+0

Đọc lại câu hỏi của bạn và cho tôi biết nếu bạn không nói "Huh?" :) Vui lòng hiển thị tệp 'views/layouts/application.html.erb' của bạn. Bạn đang sử dụng bố cục mặc định hay bạn chỉ định nó trong mỗi bộ điều khiển? – iwasrobbed

+0

Đó là tổng số vô nghĩa. Xin lỗi vì điều đó. Tôi đã dọn dẹp câu hỏi và thêm tệp layout/application.html.erb của tôi. Tôi đang cố gắng sử dụng bố cục mặc định và chưa chỉ định bất kỳ bố cục nào trong bất kỳ trình điều khiển nào. –

Trả lời

67

Tôi chỉ chạy vào này cùng một vấn đề bản thân mình và vấn đề chỉ là một sai lầm đơn giản.

Bộ điều khiển của bạn PublicController đang phân lớp "ActionController :: Base". Bộ điều khiển khác hơn ApplicationController của bạn cần phải phân lớp từ ApplicationController để cho quan điểm của mình để được trả lại trong bố trí application.html.erb

Nếu bạn thay đổi

PublicController < ActionController::Base 

để

PublicController < ApplicationController 

nó nên công việc.

+1

Tuyệt vời! Nó hoạt động. – mainframer

+1

một số thời gian sẽ xảy ra :) – suvankar

+0

Oh yeah có bạn đi @ knt. – dps

4

Chạy vào cùng một vấn đề với một nếp nhăn cuối cùng: Tôi đã ghi đè khởi tạo trong bộ điều khiển được phân lớp. Hãy đảm bảo gọi điều đầu tiên là "siêu":

def initialize 
    super 
    @some_client = SomeClient.new 
end 
Các vấn đề liên quan