收益率和默认情况|| 不输出默认情况

cou*_*lix 9 ruby ruby-on-rails view ruby-on-rails-3

我有一个简单的yield用例,由于某些未知原因,默认情况从未显示:

在我的super_admin布局中,我有:

<%= yield :body_id || 'super_admin_main' %>
Run Code Online (Sandbox Code Playgroud)

我的控制器

class Superadmin::GolfsController < ApplicationController
  layout "super_admin"

  def show 

  end
end
Run Code Online (Sandbox Code Playgroud)

我的秀视图

有还是没有

<% content_for(:body_id) do %>sadmin_golfs<% end %>
Run Code Online (Sandbox Code Playgroud)

随着:sadmin_golfs显示.

without:显示空字符串而不是super_admin_main

任何人都可以重现相同的行为吗?

Dir*_*n12 26

尝试 <%= yield(:title).presence || 'My Default Title' %>

Object#presence相当于object.present? ? object : nil(AS 3 rc docs),并且基本上允许带有标题的传统语法.

  • 这是rails 3的更好答案 (2认同)

Voy*_*yta 19

使用括号:

<%= (yield :body_id) || 'super_admin_main' %>
Run Code Online (Sandbox Code Playgroud)

要么

<%= yield(:body_id) || 'super_admin_main' %>
Run Code Online (Sandbox Code Playgroud)

没有它们就是假设 yield (:body_id || 'super_admin_main')

编辑:Rails 3使用ActiveSupport::SafeBuffer而不是字符串/ nil(Rails 2),因此即使没有content_for提供输出也不是nil .所以尝试:

<%= yield(:body_id).empty? ? 'super_admin_main' : yield(:body_id)%>
Run Code Online (Sandbox Code Playgroud)