用三元运算符表示条件HAML

Dan*_*May 6 ruby haml sinatra

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

- if @page.nil?
  %br (nothing yet)
- else
  %br #{@page.name}
Run Code Online (Sandbox Code Playgroud)

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

你的帮助将不胜感激:)

Phr*_*ogz 15

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

%br
- if @page.nil?
  (nothing yet)
- else
  #{@page.name}
Run Code Online (Sandbox Code Playgroud)

为此你可以简单地做:

%br
#{@page.nil? ? "(nothing yet)" : @page.name}
Run Code Online (Sandbox Code Playgroud)

要么

%br
= @page.nil? ? "(nothing yet)" : @page.name
Run Code Online (Sandbox Code Playgroud)

或者干脆:

<br>#{@page ? @page.name : "(nothing yet)"}
Run Code Online (Sandbox Code Playgroud)

但是,我个人会在控制器中"修复"这个,所以你总是有一个@page,有:

unless @page
  @page = Page.new( name:"(nothing yet)", … )
end
Run Code Online (Sandbox Code Playgroud)

有了它,你可以找出一个新的/空/无页面的样子,并让你的视图像对待任何其他页面一样对待它.您@page仍然没有@page.id,所以您可以使用它来测试,以决定您是创建新项目还是编辑现有项目.

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

旁白:你创建一个<br>几乎从来没有一个好主意,你正在使用Haml的这创造它 不应该被用于内容的标记.你可能会退后一步思考你在做什么.