ruby on rails我正在尝试使用find()返回单个结果

时间:2012-11-22 23:09:08

标签: ruby-on-rails ruby ruby-on-rails-3

  

可能重复:
  I want to return a single result using .find() with 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相当新,我可能会以完全错误的方式解决这个问题。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:4)

您正在将user_id传递给find方法,该方法是符号,而不是用户ID。

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

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

以下是构建代码的方法:

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

@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表格助手。

答案 1 :(得分:-1)

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