轨道上的红宝石我正在尝试使用 find() 返回单个结果



可能的重复项:
我想使用 .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 会完全理解你。

相关内容

  • 没有找到相关文章

最新更新