在Rails中更干净的方法

bra*_*boy 2 if-statement ruby-on-rails

我在其中一个视图中有一些代码.我觉得它有太多的条件.它只是检查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>
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*mas 5

我把逻辑拉成了帮手.你的问题:

<td class="notification_msg"> 
  <%= notification_image(notification.status) %> 
  <%= notification.message %> <%= cta_links_for(notification) -%> 
</td>
Run Code Online (Sandbox Code Playgroud)

然后在你的视图助手中:

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

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