2012-01-02 34 views
3

我有一个ChatController@user变量。在主页上,我显示@user.name。我也销毁并创建了与Ajax一起工作的方法,因此当我从我的聊天中删除邮件时,@user变为零。为了防止在无对象上调用name的问题,我可以将@user=User.find_by_id(:user_id)添加到每个方法。但如果我有很多方法,这会变得乏味。我可以声明@user=User.find_by_id(:user_id)一次并干起我的代码吗?导轨中的全局控制器变量

+0

您的实例变量将会持续一个请求,您可以使用before过滤器来保存重复。 – 2012-01-02 18:24:44

+0

@Berlin谢谢你的回复..我只问你有没有。 – 2015-05-08 08:29:52

回答

7

是的,这是在before_filterDocumentation)中完成的。

喜欢的东西:

class ChatController < ActionController::Base 
    before_filter :find_user 


    private 
    def find_user 
    @user ||= User.find_by_id(params[:user_id]) 
    end 
end 

您也可以考虑使用Inherited Resources其自动执行此为您服务。

+0

它完美的作品!谢谢 – Berlin 2012-01-02 18:31:45

+0

@柏林 - 确保你接受你选择的答案。 – AndrewF 2012-01-02 18:34:54

+0

这是青春之一! – Berlin 2012-01-02 18:38:40