Rails在视图中写入变量而不使用<%=%>

时间:2014-04-24 19:59:43

标签: ruby-on-rails ruby actionview

假设我有变量@var。通常我会使用<%= @var %>将其写入视图。现在我想从我的视图中调用一个模块方法,该方法在内部决定写入@var的内容。

在模块内部,我无法使用<%= %>。如何从模块中打印@var的内容?该方法将如下调用:<% my_method %>。感谢

更新 谢谢你到目前为止的答案。也许我应该更清楚地说明我的初始问题。对不起,如果我不够清楚。

起初我使用<%= %>标签,如下所示:

def print_if_present(var)
  var ? var : ""
end

<%= print_if_present var %>

但是,当var为零时,我得到“”作为输出,在视图中占用空间。我该如何防止这种行为?

2 个答案:

答案 0 :(得分:6)

我假设您的模块实际上是视图助手。如果是这样,只需返回var。

def my_method
  if my_condition
    @var
  else # else clause is optional
    @other_var
  end
end

请注意,else子句是可选的。如果你想写什么或什么都不想,你可以简单地使用if。这是因为如果if没有被执行而没有其他,它将返回nil,它将被转换为模板中的空字符串。只是为了说明,

if true
  1
end
 => 1 #return if last value

if false
  1
end
 => nil # return nil because there is no else block

由于您仍希望在模板上打印方法的返回值,因此需要保持等号:

<%= my_method %>

答案 1 :(得分:2)

执行此操作的最佳方法是让您的方法返回字符串并使用<%= ... %>中的def my_method if some_condition concat "Something or other" else concat "Something else" end end ,但在Rails中如果您确实需要直接从帮助程序编写输出,则可以使用fotanus’ answer

  

在视图中输出文字的首选方法是使用&lt;%=“text”%&gt; eRuby语法。常规 puts print 方法在eRuby代码块中无法按预期运行。如果绝对必须在非输出代码块中输出文本(即&lt; %%&gt;),则可以使用concat方法。

所以你可以这样定义一个帮助器:

<% my_method %>

然后在非输出块中使用它:

{{1}}