可能的重复项:
我想使用 .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 相当陌生,我可能以完全错误的方式解决这个问题。任何帮助都非常感谢。
您正在将 :user_id 传递给 find 方法,该方法是一个符号,而不是用户 ID。
您必须传递一个数字才能查找,然后 find 将搜索具有该 ID 的记录。
另一个问题,你为什么要根据查找结果调用收集?查找仅返回一行,而不是数组。
以下是您应该如何构建代码:
您应该将用户变量放入控制器中,例如:
@user = User.find(params[:id])
请注意,如果未找到模型,find 会引发异常,如您所见,请考虑使用如果未找到模型则返回 nil 的find_by_id。
然后,您可以在视图中使用@user。
如果要显示仅包含用户的选择标记,请执行以下操作:
<%= f.select, :user_id, options_for_select([[@user.user_name, @user.id]]) %>
检查表单帮助程序 http://guides.rubyonrails.org/form_helpers.html。
ActiveRecord 中有一个方法:@user = User.find_by_id(params[:id]) 。它返回一个实例对象@user ,您可以在其上调用 @user.name 。Ruby 约定是这样的——如果你@user传递给一个方法,它接收一个 ID 作为参数,你不必写 @user.id,Rails 会完全理解你。