在Rails中更干净的方法

时间:2010-08-30 10:52:03

标签: ruby-on-rails if-statement

我的一个观点中有一些代码就像这样。我觉得它有太多的条件。它只是检查ActiveRecord对象的状态并设置图像。有没有更好的方法在Rails中执行以下操作?

<td class="notification_msg">
  <% if notification.status == NOTIFICATION_STATUS.index("Failure") %>
     <img src="images/failure.png" style="vertical-align: middle"/>
  <% elsif notification.status == NOTIFICATION_STATUS.index("Success") %>
     <img src="images/success.png" style="vertical-align: middle"/>
  <% elsif notification.status == NOTIFICATION_STATUS.index("Warning") %>
     <img src="images/warning.gif" style="vertical-align: middle"/>
  <% else %>
     <img src="images/unknown.gif" style="vertical-align: middle"/>
  <% end %>
  <%= notification.message %> <%= cta_links_for(notification) -%>
</td>

由于

2 个答案:

答案 0 :(得分:5)

我将逻辑拉成帮手。你的erb:

<td class="notification_msg"> 
  <%= notification_image(notification.status) %> 
  <%= notification.message %> <%= cta_links_for(notification) -%> 
</td>

然后在你的视图助手中:

def notification_image(status)
  name = NOTIFICATION_STATUS[status].downcase
  return image_tag "#{name}.png"
end

当然,没有内联样式。所以把.notification_msg img{vertical-align:middle;}放在你的css文件中。

答案 1 :(得分:4)

您可以更改

 <img src="images/success.png" style="vertical-align: middle"/>

= image_tag "success.png

然后使用CSS:

.notification_msg img{vertical-align:middle;}

我很困惑为什么你在失败时显示success.png,一旦你解释了我会给我的答案添加更多信息:)


据我所知,我会做些什么:

ERB:

<td class="notification_msg">
  <%= image_tag "#{notification.status}.png" %>
  <%= notification.message %> <%= cta_links_for(notification) -%>
</td>

的CSS:

.notification_msg img{vertical-align:middle;}

这不是防错的,但我希望它会给你一个想法