我有一个ChatController
和一个@user
变量。在主页面上,我显示@user.name
。我也有破坏和创建与ajax一起使用的方法,所以当我从聊天中删除一条消息时,@user
变为零。为了防止问题在nil对象上调用name
,我可以为每个方法添加@user=User.find_by_id(:user_id)
。但如果我有很多方法,这就变得乏味了。我可以声明@user=User.find_by_id(:user_id)
一次并干掉我的代码吗?
答案 0 :(得分:7)
是的,这是在before_filter
(Documentation)中完成的。
类似的东西:
class ChatController < ActionController::Base
before_filter :find_user
private
def find_user
@user ||= User.find_by_id(params[:user_id])
end
end
您也可以考虑使用Inherited Resources为您自动执行此操作。