2012-06-19 1 views
0

나는 내 레일 중 하나 3 응용 프로그램 뷰에서 다음 코드를 한 다음과 같이Rails 3 애플리케이션의 필드 값에 따라보기를 수정 하시겠습니까? 다음과 같이</p> <p><img src="https://i.stack.imgur.com/oMcj1.jpg" alt="Screenshot"></p> <p>원시 레일 코드는 다음과 같습니다

<ul> 
<li style="position:relative"> 
<b>MR</b> - 18 Jun. 2012 - 11:07<br /> 
<p style="width:85%">Paid by Cheque 000562</p> 
<span style="position:absolute;top:0px;right:0px;text-align:right">&pound;0,00<br /><b>Balance: -&pound;7,36</b></span> 
</li> 
<hr /> 
<li style="position:relative"> 
<b>JJ</b> - 01 May. 2012 - 09:35<br /> 
<p style="width:85%">label 2 Packets Recovery -Rabbit</p> 
<span style="position:absolute;top:0px;right:0px;text-align:right">&pound;0,00<br /><b>Balance: &pound;7,36</b></span> 
</li> 
<hr /> 

이 콘텐츠를 표시 :

<ul> 
<% @animal.clinicals.each do |clinical| %> 
<li> 
<b><%= clinical.UserID %></b> - <%= clinical.FullDateTime.strftime("%d %b. %Y - %H:%M") %><br /> 
<p><%= clinical.ClinicalText %></p> 
<span><%= number_to_currency(clinical.Fees, :unit => "&pound;", :separator => ",", :delimiter => "") %><br /><b>Balance: <%= number_to_currency(clinical.LineBalance, :unit => "&pound;", :separator => ",", :delimiter => "") %></b></span> 
</li> 
<hr /> 
<% end %> 
</ul> 

내가하려는 것은 ClinicalText 필드의 값에 따라 HTML 코드를 변경하는 것입니다. 예를 들어, 다음 해당 필드에 가능한 항목은 다음과 같습니다

label 2 Packets Recovery -Rabbit 
Surcharge (Credit) 
disp 250 Tabs... 

ClinicalText가 시작 부분에 '라벨'을 포함한다면, 나는 단어 라벨을 제거하고 리튬에 CSS 스타일을 추가하고 싶습니다. 마찬가지로 'Surcharge'또는 'disp'가 포함 된 경우 li에 다른 CSS 스타일을 추가하고 싶습니다.

나는 뷰에서 if, else 및 elseif 문을 사용하여 이것을 수행하는 방법을 생각할 수 있지만 어떤 종류의 도우미에 있기를 원합니다.

모든 포인터가 감사하겠습니다!

답변

1

전체 <p> 태그를 생성하는 도우미를 작성하면 클래스를 쉽게 추가 할 수 있으며 CSS로 스타일을 지정할 수 있습니다. 당신은 (대부분의 다른 언어 switch) case 문을 사용할 수 있습니다 :

def format_clinical_text(txt) 
    cls = '' 

    case(txt) 
    when /\Alabel/i 
     txt.sub!(/label\s*/, '') 
     cls = 'label' 
    when /\Asurcharge/i 
     cls = 'surcharge' 
    when /\Adisp/i 
     cls = 'disp' 
    end 

    return "<p class=\"#{cls}\">#{ERB::Util.h(txt)}</p>".html_safe 
end 

그런 다음이 라인 :

<p><%= clinical.ClinicalText %></p> 

이 될 것입니다 :

<%= format_clinical_text(clinical.ClinicalText) %> 

그리고 그건! 이 정규 표현식은 대소 문자를 구별하지 않지만 트리거 단어는 입력 문자열에서 맨 처음에 있어야합니다 (공백이나 nuthin이 없음). 또한 일치하는 단어는 "label" 상자에서만 제거됩니다. 그것이 내가 당신의 질문을 해석하는 방법이지만, 나는 틀릴 수도 있습니다. 필요한 경우 조정하십시오.

희망 하시겠습니까?

관련 문제