【问题标题】:instance variables added in rails helpers are not available in views (templates)?Rails 助手中添加的实例变量在视图(模板)中不可用?
【发布时间】:2009-08-28 13:36:21
【问题描述】:

我正在尝试在帮助程序中添加一些实例变量,如下所示:

module ApplicationHelper
 def title=(title)
   @title = title
 end

 def title
  @title
 end
end

当我在 views/pages/index.html.erb 中分配标题时,如下所示:

<% title = 'Listing Pages' %>

并尝试在 views/layouts/application.html.erb 中显示它,如下所示:

<%= title %>

它显示为'',经过一些调试,看起来@title 没有被设置。

为什么辅助函数中添加的实例变量在视图(模板)中不可用?

提前致谢。

【问题讨论】:

  • 仅供参考,您可以使用 attr_accessor 在一行中实现 getter 和 setter。

标签: ruby-on-rails helpers


【解决方案1】:

我的猜测是 Ruby 认为你在做的事情

title = 'Listing Pages'

作为对局部变量title的赋值。

尝试在它前面加上self,看看是否有帮助:

self.title = 'Listing Pages'

【讨论】:

  • @Milan:非常感谢,它确实解决了问题。有没有其他方法可以让 ruby​​ 理解我们正在尝试做的是尝试调用方法而不是附加前置?
  • 我认为没有更好的方法。这就是解释器的工作方式。避免这种问题的最好方法就是观察这个“a = b”模式并稍微思考一下。经验法则是:通过实例中的 setter 方法进行分配时,始终在其前面加上 self。
  • 一种可能的解决方法:将您的 setter 方法命名为 set_title 而不是 title=。然后你就不需要添加 self 并且像这样使用它: set_tile "Listing pages"
猜你喜欢
  • 2011-07-13
  • 2011-01-08
  • 1970-01-01
  • 2015-10-23
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
相关资源
最近更新 更多