在模板中传递默认参数的最佳方法

Pau*_*iro 2 elixir phoenix-framework

有时在我的模板中我想为某些CSS属性定义默认值,当这些值不作为渲染函数中的参数传递时,如下所示:

height: <%= if @height do %><%=@height%><% else %>"50px";<%end%>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种更好(更简洁)的方式.

Dog*_*ert 6

你可以使用这个事实

  1. @变量也可以通过名为的地图访问assigns,
  2. 使用括号语法访问地图中不存在的键会返回nil而不是引发异常,
  3. ||返回右侧值,如果是左侧值nil,

和写:

<%= assigns[:height] || "50px" %>
Run Code Online (Sandbox Code Playgroud)

获得与if/ 相同的行为else.

编辑:如果你总是设置@height,即使值是nil,你可以使用更小的代码执行此操作:

<%= @height || "50px" %>
Run Code Online (Sandbox Code Playgroud)

即使@height未设置为任何值,前面的代码也会起作用,但如果未设置,则会引发异常@height.