0

我的 Rails 3 应用程序视图之一中有以下代码:

<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 />

这显示内容如下:

截屏

原始 Rails 代码如下:

<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 开头包含“标签”,我想删除单词标签并向 li 添加 css 样式。同样,如果它包含 'Surcharge' 或 'disp' 我想为 li 添加不同的 css 样式。

我可以想到一种在视图中使用 if、else 和 elseif 语句的方法,但我更希望这是某种帮助器。

任何指针将不胜感激!

4

1 回答 1

1

我会编写一个生成整个<p>标签的助手 - 这将使您更容易添加类,然后您可以使用 CSS 设置样式。您可以使用caseswitch在大多数其他语言中)语句:

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

就是这样!请注意,这些正则表达式不区分大小写,但要求触发词是输入字符串中的第一件事(没有空格或小写字母);此外,只有"label"大小写会删除它匹配的单词。这就是我解释你的问题的方式,但我可能是错的。根据需要进行调整。

希望有帮助!

于 2012-06-21T17:20:33.740 回答