2015-11-12 6 views
2

Я создал приложение Rails, и я играю с внутренними элементами. Раньше мой application.html.erb правильно отображался, но теперь кажется, что Rails полностью игнорирует его, потому что он даже не генерирует ошибку.application.html.erb все еще не отображается

В связи с этой проблемой возникло множество вопросов по переполнению стека. Я посмотрел, что я думаю, это все, но никто не помог.

Мои маршруты:

Rails.application.routes.draw do 

    # static_pages from rails tutorial ch. 3 
    get 'static_pages/home' 
    get 'static_pages/help' 
    get 'static_pages/about' 

end 

Здесь вы вид/макет/application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
     <title>This Title is not showing up</title> 
     <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
     <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
     <%= csrf_meta_tags %> 
    </head> 
    <body> 
    <p> why isnt this showing up?? </p> 
     <%= yield %> 

    </body> 
</html> 

Вот static_pages_controller:

class StaticPagesController < ApplicationController 
    layout 'application' #<- I know this shouldn't be necessary, but I thought i'd try 

    def initialize 
     @locals = {:page_title => 'Default'} 
    end 

    def about 
     @locals[:page_title] = 'About' 
     render @locals 
    end 

    def help 
     @locals[:page_title] = 'Help' 
     render @locals 
    end 

    def home 
     @locals[:page_title] = 'Home' 
     render @locals 
    end 

end 

Вот контроллер Application :

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    protect_from_forgery with: :exception 
end 

Других макетов нет. Моя папка Просмотров имеет следующую структуру:

-Views 
|-layouts 
||-application.html.erb 
| 
|-static_pages 
||-about.html.erb 
||-home.html.erb 
||-help.html.erb 

Я пытался целенаправленно генерирующей ошибку в application.html.erb, называя переменные, которые не существуют и безотносительно другие махинаций. Rails полностью игнорирует меня, и я чувствую себя неуверенно.

Все, что я хотел сделать, это показать имя страницы в <title>, но я не могу даже получить открытый текст для рендеринга. Как я могу заставить это работать, чтобы я мог нормально потерпеть неудачу при получении переменной контроллера в заголовке?

ответ

4

Вы не должны переопределять контроллер initialize. Это приведет к поломке поведения базового класса.

Хотя, я считаю, просто называя super от initialize будет устранить проблему, правильный способ Rails для инициализации контроллера для конкретного действия является использование before filter вместо этого.

Пример:

class StaticPagesController < ApplicationController 
    layout 'application' 

    before_action :load_locals 

    def load_locals 
    @locals = {:page_title => 'Default'} 
    end 

    ... 
end 
+0

Да, вы его получили. Могу я спросить, как мне создать @locals, чтобы перейти к представлению? – ZAR

+0

Попробуйте использовать фильтр 'before_action' или просто вызовите какой-то общий метод из всех ваших действий. –

+0

Awesome - спасибо! – ZAR

Смежные вопросы