假设我有变量@var
。通常我会使用<%= @var %>
将其写入视图。现在我想从我的视图中调用一个模块方法,该方法在内部决定写入@var
的内容。
在模块内部,我无法使用<%= %>
。如何从模块中打印@var
的内容?该方法将如下调用:<% my_method %>
。感谢
更新 谢谢你到目前为止的答案。也许我应该更清楚地说明我的初始问题。对不起,如果我不够清楚。
起初我使用<%= %>
标签,如下所示:
def print_if_present(var)
var ? var : ""
end
<%= print_if_present var %>
但是,当var
为零时,我得到“”作为输出,在视图中占用空间。我该如何防止这种行为?
答案 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}}