2010-07-22 3 views
3

이미지 링크 첨부 파일 (linktype = "image"또는 일부 텍스트 (linktype = "text))이 포함될 수있는 Note 모델이 있습니다. 노트를 표시하면 링크 유형에 따라 표시 방법이 달라집니다. 예는 다음과 같습니다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 행)가 포함됩니다. 자바 스크립트를 반환하는 데 필요할지라도 도우미 메서드를 사용할 수 있습니까? 그렇다면 어떻게해야합니까? 읽어 주셔서 감사합니다.

답변

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 

당신이 도우미 메서드를 사용할 수 있습니다 :

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