帮手内部的Rails 3和控制器实例变量

时间:2011-03-06 04:24:05

标签: ruby-on-rails-3

我刚遇到类似于http://www.ruby-forum.com/topic/216433

的问题

我需要从helper访问控制器实例变量。

这是我所做的代码,但它不起作用。

控制器:

class ApplicationController < ActionController::Base
  helper_method :set_background_type #for action only background setting

  #for controller-wise background setting
  def set_background_type(string)
    @background_type = string
  end
end

助手:

module ApplicationHelper

  def background_type
    @background_type || 'default'
  end

end

布局:

<body class="<%= background_type %>">

2 个答案:

答案 0 :(得分:3)

经过一番搜索。我从

获得了一个解决方案

http://api.rubyonrails.org/classes/ActionController/Helpers/ClassMethods.html

,控制器变为:

class ApplicationController < ActionController::Base
  helper_method :set_background_type #for action only background setting
  helper_attr :background_type
  attr_accessor :background_type

  #for controller-wise background setting
  def set_background_type(string)
    @background_type = string
  end

  def background_type
    @background_type || 'default'
  end
end

并从ApplicationHelper中删除该方法。 它适用于这种情况,但我仍然很好奇,

有没有办法在ApplicationHelper中访问方法的控制器实例变量?

答案 1 :(得分:0)

如果你正在使用erb模板,我猜你是,那么你需要使用erb语法来调用helper方法。你试过了吗?

<body class="<%= background_type %>">