代码之家  ›  专栏  ›  技术社区  ›  bragboy

在Rails中实现这一点的更清洁的方法

  •  2
  • bragboy  · 技术社区  · 14 年前

    我的一个视图中有这样的代码。我觉得它有太多的条件。它所做的只是检查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 回复  |  直到 14 年前
        1
  •  5
  •   Mark Thomas    14 年前

    我会把逻辑变成一个助手。你的雇员:

    <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文件中。

        2
  •  4
  •   marcgg    14 年前

    你可以改变

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

    = image_tag "success.png
    

    然后使用CSS:

    .notification_msg img{vertical-align:middle;}
    

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


    根据我在这里的理解,我会做些什么:

    欧洲广播电台:

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

    CSS:

    .notification_msg img垂直对齐:中间;
    

    这不是错误证明,但我希望它能给你一个主意