Ruby On Rails - "undefined method `id' for 4:Fixnum" Ruby On Rails - “未定义方法 `id',用于数字类型的 4”

5

最近,我决定在我的Ruby On Rails应用程序中列出所有的users,因为我无法找到其他方法来列出它们,所以决定使用partials。 下面是我在管理页面上(连接到自己的管理控制器)的代码:

<%= render :partial => User.find(:all) %>

我在用户视图文件夹中有一个名为_user.html.erb的文件。它包含以下内容:

<ul>
<% div_for @user.object_id do %>
    <li><%= link_to user.username, user.username %></li>
<% end %>
</ul>

当应用程序运行并进入管理页面时,我会收到以下错误消息:

undefined method `id' for 4:Fixnum

它说这是由于部分文件中的这一行引起的:
<% div_for @user.object_id do %>

我不确定为什么会发生这种情况(我已经谷歌搜索了几个小时,只找到一些对我不起作用的解决方案)。我认为这与我的使用@user实例变量有关,但我还不确定。

4个回答

8
你会收到该错误提示,因为 div_for 需要一个活动记录对象作为参数,并调用其上的 id 方法。您传递了一个 fixnum(@user.object_id 的结果),它不是活动记录对象,也没有 id 方法。
所以请传递 @user 而不是 @user.object_id,这样就可以正常工作。
此外,您应该使用 user 而不是 @user,Rails 3 不再为局部设置实例变量。

使用@user时,我收到了错误消息:“Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id” - user354346
如果你正在使用Rails 3,你需要使用user而不是@user(即使你不是,你也应该使用user,因为这样它将适用于任何Rails版本)。 - sepp2k
1
非常感谢!使用“user”而不是“@user”非常有效! :D - user354346

0

你可以试试这个,对我来说很有效。

@item.unit_of_measure.name 

替代

@item.unit_of_measure_id.name

0

如果你使用的是列而不是对象,或者反之亦然,在这种情况下你会得到这种错误。

例子

我正在使用 id 而不是 user = User.first 对象。


0

去掉 .object_id 部分。我真的想不出你为什么要使用 object_id!你有充分的理由这样做吗?无论如何,div_for 会在对象周围包装一个 div,所以保留 .object_id 部分!


使用@user时,我收到了错误消息:“Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id” - user354346
@user 现在是 nil。请再次检查您的控制器以设置 @user 实例变量。我猜您不希望 @user 为 nil :) - Gerry
既然这是用户部分 - 我假设它已经知道@user是什么。既然我想要循环遍历用户,那么它肯定应该已经知道每个@user是什么了吧?如果我需要在控制器中添加一些内容 - 是哪个控制器(用户还是管理)? - user354346
不,如果您在控制器中没有定义@user,则视图/部分就不能(也不应该)猜测@user。请回答以下问题:
  1. 您的视图链接到哪个控制器动作?
  2. 您是否使用了资源?
  3. 您是否尝试过render:partial =>“your_partial”,:object => @user? 这告诉部分与哪个对象一起呈现。
- Gerry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接