好的,我正在研究我的小项目的观点。每天我都会这样做:
<li <%= 'class="'+item.status.caption+'"' if %w{ sold, absent }.include?(item.status.caption) %> >
最近,我在Ruby API中找到了一个合适的String方法,名为 quote 。 我写了这个:
<li <%= 'class='+item.status.caption.quote if %w{ sold, absent }.include?(item.status.caption) %> >
但是应用程序丢失了一个错误,说它无法识别该方法。那么,是否有适当的方法来进行这种通常的引用(或者,甚至是“自定义符号/字符串的'ththination':P)?像'surround_with'之类的东西?没有在Rail API中找到线索。
答案 0 :(得分:2)
这在视图中的逻辑太多了,而你没有使用Rails给你的助手。在app/helpers
中的 foo_helper.rb 文件中创建一个方法(其中'foo'是您的控制器名称):
def display_item(item)
case item.status.caption
when /sold/ then class = 'sold'
when /absent/ then class = 'absent'
else class = nil # You could add more cases here as needed
end
content_tag :li, item.name, :class => class # Or whatever you want shown
end
然后,在您看来,您可以致电<%= display_item(item) %>
而不是所有嵌入式if
乱码。
(哦,这不是你的问题,但作为一项额外的练习,还要考虑如何使用item.status.caption
和item.sold?
等方法减少item.absent?
链接。通过将status
转换为可以直接测试的内容。谷歌在“Demeter法则”中找出为什么这是一个好主意。)
答案 1 :(得分:1)
您还可以创建一个非常简单的帮助程序,例如:
def quoted_class(val)
"class='#{val}'"
end
然后你会在你的例子中使用它,如下:
<li <%= quoted_class(item.status.caption) if %w{s,abs}.include?(item.status.caption) %>>
答案 2 :(得分:1)
或者您可以使用content_tag?你没有说明你在li中展示了什么,但你可以做类似的事情:
<%= content_tag :li, "your list content", ({:class => item.status.caption} if %w{ sold absent }.include?(item.status.caption)) %>
顺便说一句,我认为你不想在%w字符串中使用逗号,除非你真的想要与“已售出”(用逗号)或“缺席”匹配。
答案 3 :(得分:0)
要使用引号,我会做这样的事情:
"This is '#{string_inside_quotes}'."
或者
"This is \"#{string_inside_quotes}\"."
虽然我不太清楚你在原始例子中的意思。
答案 4 :(得分:0)
为什么不
<li class="<%= item.status.caption if %w{ sold, absent }.include?(item.status.caption) %>">
作为一个空类属性就像没有类属性一样?
如果你不想逃避你的报价,还有另一种引用ruby的方法:
<li <%= %q(class="#{item.status.caption}") if %w{ sold, absent }.include?(item.status.caption) %>>