Rails中的全局控制器变量

Ber*_*lin 3 ruby ruby-on-rails

我有一个ChatController@user它的变量.在我显示的主页面上@user.name.我也有破坏和创建使用ajax的方法,所以当我从聊天中删除一条消息时,@user变为零.为了防止问题调用namenil对象,我可以添加@user=User.find_by_id(:user_id)到每个方法.但如果我有很多方法,这就变得乏味了.我可以申报@user=User.find_by_id(:user_id)一次并干掉我的代码吗?

And*_*ewF 7

是的,这是在before_filter(文档)中完成的.

就像是:

class ChatController < ActionController::Base
  before_filter :find_user


  private
  def find_user
    @user ||= User.find_by_id(params[:user_id])
  end
end
Run Code Online (Sandbox Code Playgroud)

您还可以考虑使用为您自动执行此操作的继承资源.