0

可能重复:
我想使用 .find() 和 Ruby on Rails 返回单个结果

这是我的代码

<%= f.select :user_id, User.find(:user_id).collect {|t|
    [t.user_name, t.id]} %>

这给出了输出

Couldn't find User with id=user_id

它似乎没有传递变量,而是将“user_id”作为字符串传递。

我只想让它将单个结果返回到选择列表或标签中

我对 ROR 还很陌生,我可能会以完全错误的方式解决这个问题。任何帮助深表感谢。

4

2 回答 2

4

您将 :user_id 传递给 find 方法,这是一个符号,而不是用户 ID。

您必须传递一个数字才能找到,然后 find 将搜索具有该 ID 的记录。

另一个问题,你为什么在 find 的结果上调用 collect ?Find 只返回一行,而不是数组。

以下是您应该如何构建代码:

您应该将用户变量放入控制器,例如:

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

请注意,如果找不到模型,find 会抛出异常,如您所见,请考虑使用 find_by_id 如果没有找到模型则返回 nil。

然后,您可以在视图中使用@user。

如果要显示仅包含用户的选择标签,请执行以下操作:

<%= f.select, :user_id, options_for_select([[@user.user_name, @user.id]]) %>

检查http://guides.rubyonrails.org/form_helpers.html以获取表单助手。

于 2012-11-22T23:11:51.950 回答
-1

ActiveRecord 中有一个方法:@user = User.find_by_id(params[:id])。它返回一个实例对象 @user ,您可以在其上调用 @user.name 。ruby 约定是这样的——如果你将@user 传递给一个方法,它接收一个ID 作为参数,你不必写@user.id,Rails 会完全理解你。

于 2012-11-22T23:17:00.293 回答