我一直在弄乱我的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
任何想法?谢谢!
答案 0 :(得分:0)
好的,明白了。我按顺序加载组织和用户,但我的组织负载正在返回nil
,因此未调用load_user
:
before_filter :authorize
def authorize
load_organization && load_user
end
因为load_organization
返回nil
,它没有杀死控制器动作链(就像返回false
那样)但它也阻止了load_user
被调用。 DERP!