【问题标题】:Rails: What is the best way to only display a line when not empty in html.erb?Rails:在html.erb中不为空时仅显示一行的最佳方法是什么?
【发布时间】:2011-07-30 05:49:21
【问题描述】:

第 1 部分: 下面的代码似乎工作正常,但必须有更好的方法来执行第二行。这是为了显示用户地址。这很简单,如果地址的第二行有内容,我会输出它和换行符。

      <%= @sponsor.address1 %><br />
      <%= raw "#{@sponsor.address2} <br />" unless @sponsor.address2.empty? %>
      <%= @sponsor.city %>, <%= @sponsor.state %> <%= @sponsor.zip %>

是否有一些明显的、更优雅的方法来做到这一点?

第 2 部分:如果值也可能为零怎么办?我应该在模型中处理它吗?有没有一些简单的方法可以让模型返回空白而不是 nil?

在另一种情况下嵌套它似乎太混乱了。有人可以告诉我完成上述第 1 部分和/或第 2 部分的最佳 Rails 方法吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    如果你想让 div 也有条件,那就没有更多选项了;

    <%= content_tag :div do -%>
      @sponsor.address2
    <% end if @sponsor.address2? -%>
    

    <%= content_tag :div, @sponsor.address2 if @sponsor.address2? %>
    

    【讨论】:

    • 是的,我经常处理地址,对于通常为空白的字段,这是我的首选方法。好建议。
    • 谢谢。到目前为止,这似乎是最好的答案。即使是这样一个简单的事情也有点长。我可能想把它变成一个助手。
    【解决方案2】:

    您可以将标签助手用于&lt;br/&gt;,而不是处理原始文件

    <%= @sponsor.address2 + tag('br') if @sponsor.address2? %>
    

    【讨论】:

    • 当我提醒自己 content_for 的语法时,这很有趣 - 它引用了标签,我想知道用例可能是什么,但你在这里使用了它。不错!
    • 谢谢。我喜欢这非常简洁,但是(在 rails 3 中)它逃脱了
    【解决方案3】:
    <div>
      <%= @sponsor.address1 %>
    </div>
    <div>
      <%= @sponsor.address2 if @sponsor.address2? %>
    </div>
    

    这应该同时处理nil?empty? 的情况。

    如果你不想,你可以设置 div 的样式。默认情况下,应该在彼此之上渲染。如果address2?返回false,就会有一个0px高的空div看不到。

    【讨论】:

      猜你喜欢
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多