我正在尝试在ApplicationController
中使用_before_filter_来获取与http参数中的user_id
匹配的用户对象,如:
before_filter :fetch_user
def fetch_user
if params[:user_id].present?
@user = User.find(params[:user_id])
end
rescue ActiveRecord::RecordNotFound
# user not found
end
除了名为UsersController 的控制器(其中ApplicationController
似乎设置为@user
)之外,所有继承自nil
的控制器都适用于我以某种方式。
这种行为可能是什么原因?这是标准行为吗?如何避免/禁用它?
更新
我总是将一个名为user_id
的参数传递给控制器。
如果我将exact same before filter
直接包含在UsersController中,它就可以了!
UsersController中没有其他过滤器
更新2:
用于用户控制器的路由
match ':user_id' => 'users#show'
用户控制器代码:
def show
if @user
render :text => "user not nil"
else
render :text => "user nil"
end
end
肯定有一个用户在user_id参数处传递了id,因为
感谢您的帮助!
答案 0 :(得分:1)
point.1,你得到params [:id] as user_id
point.2使用find_by_id来避免救援ActiveRecord :: RecordNotFound,它安全地返回nil
等......
def fetch_user
user_id = controller_name=='users' ? params[:id] : params[:user_id]
@user ||= User.find_by_id user_id
end