用三元运算符表示条件HAML

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

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

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

你的帮助将不胜感激:)

您拥有的代码使文本成为
元素的子元素; 这是不可取的。 我认为你的真正含义是:

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

为此你可以简单地做:

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

要么

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

或者干脆:

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

但是,我个人会在控制器中“修复”这个,以便你总是有@page ,例如:

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

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

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

旁白:你正在创建一个几乎从来不是一个好主意的
,而你正在用Haml创建它,它不应该用于内容标记 。
你可以退一步思考你在做什么。

简单地说:

 %br = @page.try(:name) 

假设- order_count = 12%h5= Ordered #{ order_count == 1 ? "1 item" : "#{order_count} items" } for this session %h5= Ordered #{ order_count == 1 ? "1 item" : "#{order_count} items" } for this session

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