9

尝试用一种更紧凑的方式在 HAML 和 Ruby 中表达这个条件,也许使用三元运算符:

- if @page.nil?
  %br (nothing yet)
- else
  %br #{@page.name}

(根据 Neat 方法寻找类似的方法来有条件地测试是否在 HAML 模板中添加一个类

您的帮助将不胜感激:)

4

4 回答 4

18

您拥有的代码使文本成为元素的子<br>元素;这是不可取的。我认为你真正的意思是:

%br
- if @page.nil?
  (nothing yet)
- else
  #{@page.name}

为此,您可以简单地执行以下操作:

%br
#{@page.nil? ? "(nothing yet)" : @page.name}

或者

%br
= @page.nil? ? "(nothing yet)" : @page.name

或者简单地说:

<br>#{@page ? @page.name : "(nothing yet)"}

但是,就我个人而言,我会在控制器中“修复”这个问题,以便您始终拥有一个@page, 类似于:

unless @page
  @page = Page.new( name:"(nothing yet)", … )
end

有了这个,您可以找出新/空/无页面的外观,并让您的视图像对待其他任何页面一样对待它。您@page仍然没有@page.id,因此您可以将其用于测试以确定您是创建新项目还是编辑现有项目。

这就是我处理可能用于创建或编辑项目的所有表单的方式:通过创建(但不添加到数据库)具有默认值的项目来提供默认值。

旁白:您正在创建一个<br>几乎从来都不是一个好主意,并且您正在使用不应用于内容标记的 Haml 创建它 。你可能会退后一步想想你在做什么。

于 2012-09-08T13:51:52.067 回答
1

只需这样做:

%br
= @page.try(:name)
于 2012-09-08T12:23:47.863 回答
0

您还可以嵌入字符串假设- order_count = 12 %h5= Ordered #{ order_count == 1 ? "1 item" : "#{order_count} items" } for this session

于 2017-03-30T19:54:23.617 回答
-1
%br = @page ? (nothing yet) : #{@page.name}
于 2012-09-08T12:35:17.270 回答