无法在辅助程序中访问控制器实例变量

时间:2014-03-14 17:43:53

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

我一直在弄乱我的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

任何想法?谢谢!

1 个答案:

答案 0 :(得分:0)

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

before_filter :authorize

def authorize
  load_organization && load_user
end

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