ruby – 可能使用三元运算符表达条件HAML

试图用一种更简洁的方式在HAML和 Ruby中表达这个条件,也许用三元运算符:
- if @page.nil?
  %br (nothing yet)
- else
  %br #{@page.name}

(根据Neat way to conditionally test whether to add a class in HAML template寻找类似的方法)

你的帮助将不胜感激:)

解决方法

您拥有的代码使文本成为< 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>这是almost never a good idea,你正在用Haml创建它should not be used for content markup.你可以退一步思考你在做什么.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...