2012-01-14 8 views
19

Acabo de crear una nueva aplicación de rieles en Rails 3.1.1, y el diseño de mi aplicación no se representa en el navegador. Lo único que se representa es el código que coloqué en las vistas (por ejemplo, views/public/home.html.erb).Rails no está renderizando el diseño de mi aplicación

Está solo representando lo que está siendo canalizado a través de <% = rendimiento%>. Por ejemplo, localhost: 3000/public/casa está en mostrar solamente esto:

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

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

Esto es lo que está en mi /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> 

Aquí están mis rutas, así:

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 

Esto es lo que está en application_contoller.rb:

class ApplicationController < ActionController::Base 
    protect_from_forgery 

end 

Esto es lo que está en public_controller.rb:

class PublicController < ActionController::Base 
    protect_from_forgery 

    def home 
    end 

    def secret 
    end 
end 

Esto es lo que está en 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 

Y es lo que está en users_controller.rb aquí:

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

Además, he comenzado a configurar Sorcery, y se muestra la aplicación en sesiones/nuevo, pero no en mi acción pública # home. –

+0

Lea su pregunta nuevamente y avíseme si no dice: "¿Eh?" :) Por favor, muestre su archivo 'views/layouts/application.html.erb'. ¿Estás usando el diseño predeterminado o lo estás especificando en cada controlador? – iwasrobbed

+0

Eso fue un galimatías total. Lo siento por eso. Limpié la pregunta y agregué mi archivo layouts/application.html.erb. Estoy intentando usar el diseño predeterminado y no he especificado ningún diseño en ningún controlador. –

Respuesta

67

simplemente me encontré con este mismo problema yo mismo y el problema es solo un simple error.

Su controlador PublicController está subclasificando "ActionController :: Base". Los controladores que no sean su ApplicationController necesitan subclase de ApplicationController a fin de que sus puntos de vista a ser prestados dentro del diseño application.html.erb

Si cambia

PublicController < ActionController::Base 

a

PublicController < ApplicationController 

lo que debería trabajo.

+1

¡Fantástico! Funciona. – mainframer

+1

pasa algún tiempo :) – suvankar

+0

Oh, sí, ahí tienes @knt. – dps

4

Se metió en el mismo problema con una última arruga: estaba anulando la inicialización en el controlador subclasificado. Asegúrese de llamar 'super' lo primero:

def initialize 
    super 
    @some_client = SomeClient.new 
end 
Cuestiones relacionadas