2010-07-22 76 views
3

我有一個註釋模型,它可以包含圖像鏈接附件(linktype =「image」或某些文本(linktype =「text)」。當我顯示註釋時,顯示方法根據鏈接類型而變化。例子是:如何從Ruby on Rails輔助方法返回JavaScript?

<% @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

至於ERB而言,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 

您可以使用此helper方法:

<% @notes.each do |n| %> 
    <%= note_display(n) %> 
<% end %>