【问题标题】:Controller instance variable not accessible in helper在帮助程序中无法访问控制器实例变量
【发布时间】:2014-03-14 17:43:53
【问题描述】:

我一直在搞乱我的ApplicationController 并且不知何故弄坏了一些东西。我的助手ApplicationHelper::current_settings 序列化@user 以便我的JS 应用可以加载当前用户的数据。但是突然:

undefined method `id' for nil:NilClass
at `@user.id` in app/helpers/application_helper.rb, line 5

但是,在我的 better_errors 控制台中,我可以看到该变量是在控制器上设置的,只是在当前上下文中无法访问:

>> @user
=> nil
>> controller.instance_variable_get("@user")
=> #<Person id: 1, ...>
>> instance_variable_get("@user")
=> nil

我以同样的方式设置@organization,它就在那里:

>> @organization
=> #<Organization id: 1 ... >

但由于某种原因,没有@user 的迹象!

这是助手:

module ApplicationHelper
  def current_settings
    {
      person: {
        id: @user.id,
        name: @user.to_s
      }
    }.to_json.html_safe
  end
end

在控制器中,它就像:

before_filter :load_user

def load_user
  @user = Person.where(some_query).first
end

有什么想法吗??谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 actioncontroller


    【解决方案1】:

    好的,知道了。我正在按顺序加载组织和用户,但我的组织加载返回 nil,因此未调用 load_user

    before_filter :authorize
    
    def authorize
      load_organization && load_user
    end
    

    因为load_organization 正在返回nil,它并没有杀死控制器动作链(就像返回false 一样),但它也阻止了load_user 被调用。卧槽!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2014-08-27
      • 2012-10-08
      • 1970-01-01
      相关资源
      最近更新 更多