Rails - проблема с настройкой var и получением значения на макете - PullRequest
0 голосов
/ 26 февраля 2011

У меня новичок, я пытаюсь найти правильный (rails) способ установить переменную в show.html.erb и получить значение в моем макете.

В show.html.erb Я устанавливаю переменную следующим образом:

<% @meta_title = @content.meta_title %>

В моем макете я хочу установить для него значение <title>, если оно определено и имеетдлина , в противном случае я хочу использовать настройки сайта по умолчанию (загружается из config.yml).

В / views / layouts / public.html.erb

 <%= @meta_title ? @meta_title : APP_CONFIG[:site][:title] %>

Я пробовал много вариантов, но, похоже, не могу охарактеризовать условия, например:

<%= !@meta_title.blank? ? @meta_title : APP_CONFIG[:site][:title] %>
<%= !@meta_title.nil? || meta_title.length? ? @meta_title : APP_CONFIG[:site][:title] %>

Это должно быть проще для меня, но у меня всегда возникают трудности с/ if, unless заявления.Вы можете протянуть руку?Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2011

макеты не могут получить переменные из ваших шаблонов шоу, и нет никакой причины фактически делать это в действии show, так как вы хотите это в своем макете.

В вашем application_helper.rb:

def meta_title(title)
    if title
        title
    else
         TITLE_CONSTANT
         #or even just add the text here such as "My Home Page"
    end
end

Тогда в вашем макете:

<%= meta_title(@meta_title) %>

Это даст вам значение по умолчанию для переменной экземпляра, если она есть. Не забудьте установить свою константу в config/initializers/constants.rb или просто использовать текст в помощнике.

0 голосов
/ 26 февраля 2011

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

Что вам нужно сделать, это установить эту переменную в контроллере. Представление должно использоваться только для визуализации данных, эти данные должны быть созданы в вашем контроллере.

Если установить эту переменную на контроллере невозможно, попробуйте использовать content_for

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...