0

我正在尝试在我的 _before_filter_ 中使用一个与 http 参数中的 aApplicationController匹配的用户对象,例如: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

这在所有继承自ApplicationController 的控制器中都适用于我,除了称为 UsersController 的控制器似乎@usernil某种方式设置为。

这种行为的原因可能是什么?这是标准行为吗?如何避免/禁用它?

更新:

我总是将调用的参数传递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 肯定有一个用户,因为

谢谢你的帮助!

4

1 回答 1

1

在 UsersController 中的 point.1,您将 params[:id] 作为 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
于 2012-05-28T08:38:49.187 回答