2010-07-22 1 views
3

У меня есть модель примечаний, которая может содержать либо вложение изображения (linktype = "image", либо какой-либо текст (linktype = "text). Когда я показываю заметки, метод отображения изменяется в зависимости от типа link. пример:Как я могу вернуть javascript из вспомогательного метода Ruby on Rails?

<% @notes.each do |q| %> 
    <h2 class="title"><%= q.name %></h2> 
    <% if q.linktype == "other"%> 
     <script type="text/javascript">some javascript</script> 
    <% elsif q.linktype == "text"%> 
     <%= q.text %> 
    <% elsif q.linktype == "image"%> 
     <img src="<%= q.link %>" /> 
    <% end %> 
<% end %> 

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

Моя первоначальная мысль заключалась в том, чтобы поставить код отображения в помощнике, примерно так:

<% @notes.each do |q| %> 
    note_display(q.linktype, q.link) 
<% end %> 

Но некоторые из отображений включают javascript (строка 4 в первом блоке кода). Могу ли я использовать вспомогательный метод, даже если мне понадобится его для возврата javascript? Если да, то как мне это сделать? Спасибо за прочтение.

ответ

10

В javascript нет ничего особенного, вы можете вернуть его из помощников, так как вы вернете другое содержимое html. Единственное, что я хотел бы предложить использовать помощников для тегов, как

image_tag(q.link) 
javascript_tag("some javascript") 
content_tag("h2", q.name, :class => "title") 
3

Как далеко, как Еврорадио обеспокоен, JavaScript просто содержание строки, как и все остальное, вынесенным шаблона. Так что ваш вспомогательный метод может просто построить и возвращает строку:

def note_display(note) 
    content = '' 
    content << content_tag('h2', h(note.name), :class => 'title') 
    if note.linktype == 'other' 
    content << javascript_tag("some javascript") 
    elsif note.linktype == 'text' 
    content << h(note.text) 
    elsif note.linktype == 'image' 
    content << image_tag(note.link) 
    end 
    content 
end 

Вы можете использовать этот вспомогательный метод с помощью:

<% @notes.each do |n| %> 
    <%= note_display(n) %> 
<% end %> 
Смежные вопросы