这是我的代码
<%= 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 还很陌生,我可能会以完全错误的方式解决这个问题。任何帮助深表感谢。
这是我的代码
<%= 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 还很陌生,我可能会以完全错误的方式解决这个问题。任何帮助深表感谢。
您将 :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]]) %>
ActiveRecord 中有一个方法:@user = User.find_by_id(params[:id])。它返回一个实例对象 @user ,您可以在其上调用 @user.name 。ruby 约定是这样的——如果你将@user 传递给一个方法,它接收一个ID 作为参数,你不必写@user.id,Rails 会完全理解你。