【问题标题】:Rails write variable in view without using <%= %>Rails 在视图中写入变量而不使用 <%= %>
【发布时间】:2014-04-24 19:59:43
【问题描述】:

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

在模块内部我不能使用&lt;%= %&gt;。如何从模块中打印@var 的内容?该方法将像这样调用:&lt;% my_method %&gt;。谢谢

更新 感谢您到目前为止的答案。也许我应该更多地谈谈我最初的问题,以便更清楚。对不起,如果我不够清楚。

一开始我是这样使用&lt;%= %&gt;标签的:

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

<%= print_if_present var %>

但是,当 var 为 nil 时,我得到了 "" 作为输出,这在视图中占据了空间。如何防止这种行为?

【问题讨论】:

  • 模块是指视图助手,对吧?
  • 你的模块方法应该返回一个可以使用&lt;%= %&gt;写的值
  • @fotanus 是的,它是一个视图助手

标签: ruby-on-rails ruby actionview


【解决方案1】:

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

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

请注意,else 子句是可选的。如果你想写点什么或什么都不写,你可以简单地使用 if。之所以如此,是因为如果没有执行 if 并且没有 else,它将返回 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 %>

【讨论】:

    【解决方案2】:

    最好的方法是让你的方法返回字符串并使用&lt;%= ... %&gt;,就像在fotanus’ answer中一样,但是在Rails中,如果你真的需要直接从帮助程序编写输出,你可以使用concat method

    在视图中输出文本的首选方法是使用 eRuby 语法。常规 putsprint 方法在 eRuby 代码块中无法按预期运行。如果您绝对必须在非输出代码块内输出文本(即 ),则可以使用 concat 方法。

    所以你可以像这样定义一个助手:

    def my_method
      if some_condition
        concat "Something or other"
      else
        concat "Something else"
      end
    end
    

    然后在非输出块中使用:

    <% my_method %>
    

    【讨论】:

      猜你喜欢
      • 2014-12-19
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多