2012-01-14 5 views
19

Я только что создал новое приложение rails в Rails 3.1.1, а макет моего приложения не отображается в браузере. Единственное, что отображается, это код, который я помещал в представления (например, views/public/home.html.erb).Rails не отображает мой макет приложения

Это только то, что передается через <% = yield%>. Например, локальный: 3000/государственные/дома на только показывая это:

<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

Кроме того, я начал настраивать Волшебство, и он отображает приложение на сеансах/новинках, но не на моем публичном действии # home. –

+0

Повторите свой вопрос и сообщите мне, если вы не скажете: «А?» :) Пожалуйста, покажите свой файл 'views/layouts/application.html.erb'. Используете ли вы макет по умолчанию или указываете его в каждом контроллере? – iwasrobbed

+0

Это была полная тарабарщина. Извини за это. Я очистил вопрос и добавил файл layouts/application.html.erb. Я пытаюсь использовать макет по умолчанию и не указал никаких макетов в любом контроллере. –

ответ

67

Я просто побежал в этот сама проблема и проблема - просто ошибка.

Контроллер PublicController является подклассом «ActionController :: Base». кроме вашего ApplicationController контроллеры должны подклассы от ApplicationController для того, чтобы их мнения быть вынесено в макете application.html.erb

Если вы изменяете

PublicController < ActionController::Base 

в

PublicController < ApplicationController 

он должен Работа.

+1

Фантастический! Оно работает. – mainframer

+1

какое-то время происходит :) – suvankar

+0

О да, там ты ходишь @knt. – dps

4

Идти в эту же проблему с одной последней морщиной: я переопределял инициализацию в подклассовом контроллере. Обязательно называйте «супер» первым:

def initialize 
    super 
    @some_client = SomeClient.new 
end 
Смежные вопросы