метод ruby ​​on rails для широкого применения в хелпере или контроллере? - PullRequest
4 голосов
/ 23 августа 2011

У меня есть несколько переменных, к которым я хотел бы получить доступ ко всем контроллерам. Поэтому я определил их в своем application_controller.rb:

      before_filter :initialize_vars

  def initialize_vars
    @siteTitle = "my title"
    @companyName = "company"    
  end

Никаких проблем там нет. Я хотел сделать что-то подобное с логотипом, поэтому я создал еще один метод, который также вызывался с before_filter.

  def logo
    image_tag("Logo.jpg", :alt => "Logo")
  end

один экземпляр логотипа img должен ссылаться на корень сайта, поэтому я назвал его:

<%=h link_to logo, root_path %>

но это не сработало в моем макете! Когда я добавляю свой метод логотипа в application_helper.rb, все работает отлично. hhmmm.

что / где подходящее место для всего этого? Я имею в виду, только потому, что я смог заставить это работать, не делает это правильно!

Должен ли я определять свои переменные экземпляра (которые я рассматриваю как глобальные переменные) в application_controller и методе logo в моем помощнике, как я это сделал? Я чувствую, что мне здесь не хватает фундаментального понимания того, почему им нужно ездить в разные места. Я не уверен, является ли это КАК я называю метод "логотип" или куда я его помещаю. Я собираюсь поиграть с тем, как я звоню и как я написал метод логотипа, потому что я чувствую, что оба метода должны идти в application_controller.

мысли

Спасибо!

Ответы [ 2 ]

7 голосов
/ 23 августа 2011

Функции, связанные с представлениями рендеринга, помещаются в вспомогательные файлы.Обычно они генерируют контент HTML.Если вспомогательный метод используется во всем приложении во многих местах, поместите их в application_helper.rb, в противном случае они должны быть помещены в соответствующие вспомогательные файлы.

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

2 голосов
/ 23 августа 2011

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

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

http://railscasts.com/episodes/8-layouts-and-content-for

...