2012-01-14 33 views
19

我剛剛在Rails 3.1.1中創建了一個新的Rails應用程序,並且我的應用程序佈局未在瀏覽器中呈現。唯一呈現的是我放入視圖中的代碼(例如views/public/home.html.erb)。Rails沒有呈現我的應用程序佈局

它只是渲染通過<%= yield%>傳送的內容。例如,本地主機:3000 /大衆/ home是隻顯示此:

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

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

下面是在我的/layouts/application.html.erb:

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

這裏是我的路線以及:

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 

這裏是什麼在application_contoller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

end 

這裏是什麼在public_controller.rb:

class PublicController < ActionController::Base 
    protect_from_forgery 

    def home 
    end 

    def secret 
    end 
end 

這裏是什麼在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 

這裏還有什麼是在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

另外,我已經開始設置巫術了,它會在session/new中呈現應用程序,但不會在我的公共#home動作中呈現。 – 2012-01-14 23:50:39

+0

再次閱讀您的問題,如果您不說,請告訴我,「嗯?」 :)請顯示你的'views/layouts/application.html.erb'文件。您是使用默認佈局還是在每個控制器中指定它? – iwasrobbed 2012-01-15 00:08:03

+0

這是完全亂碼。對於那個很抱歉。我清理了這個問題並添加了我的layouts/application.html.erb文件。我試圖使用默認佈局,並沒有在任何控制器中指定任何佈局。 – 2012-01-15 00:22:24

回答

67

我只是碰到了這個同樣的問題我自己和問題只是一個簡單的錯誤。

您的控制器PublicController是「ActionController :: Base」的子類。比你的ApplicationController其他控制器需要從ApplicationController中爲了繼承了他們的意見application.html.erb佈局

如果改變內呈現

PublicController < ActionController::Base 

PublicController < ApplicationController 

它應該工作。

+1

太棒了!有用。 – mainframer 2015-08-13 09:43:13

+1

有些時候會發生:) – suvankar 2016-04-08 21:34:22

+0

哦,是的,你去@knt。 – dps 2016-12-12 22:13:30

4

帶着最後一個皺紋進入相同的問題:我重寫了子類控制器中的初始化。確保先打電話給'超級':

def initialize 
    super 
    @some_client = SomeClient.new 
end 
def initialize 
    super 
    @some_client = SomeClient.new 
end 
相關問題