rails - 制作可重复使用的User.find

时间:2013-11-20 08:53:29

标签: ruby-on-rails

所以我的程序中有很多地方使用:@user = User.find(params[:id])

现在,我想在ApplicationController中创建一个新方法,以便我所有的controllers都可以使用该方法,这样我就不必重复自我了。

def find_user(params[:id])
  @user = User.find(params[:id])
end

所以现在当我想在某个控制器中显示用户时,我只需在动作中键入find_user(params[:id])。但由于某种原因,这似乎不起作用。

1 个答案:

答案 0 :(得分:1)

首先,我想说虽然这是一个常见的调用,但我不会为它做一个方法,因为它本质上只是调用一个方法,但是在这里:

你让它变得有点太复杂了:

在应用程序控制器中

def find_user(user_id)
  @user = User.find(user_id)
end

在控制器中,您正在

中使用它
find_user(params[:id])

或者,如果由于某种原因你不想每次写params

在应用程序控制器中

def find_user(paramsicle) # params might be reserved
  @user = User.find(paramsicle[:id])
end

在控制器中,您正在

中使用它
find_user(params)

编辑:如果我解释为什么你的工作不起作用,那可能会有所帮助......

你的很好,除了方法参数(括号中的东西)应该只是一个标识符,除非在特殊情况下(可选参数,* args事物)。阅读更多相关信息here。问题不在于params,而是在仍然在arguments部分中尝试访问id。这就是为什么事后发现它会调用paramsicle [:id]。