【问题标题】:Ruby On Rails - "undefined method `id' for 4:Fixnum"Ruby On Rails - “4:Fixnum 的未定义方法‘id’”
【发布时间】:2011-02-09 21:13:00
【问题描述】:

我最近决定要在我的 Ruby On Rails 应用程序中列出所有 users - 因为我不知道如何以其他方式列出它们,所以我决定使用部分。 我的管理页面上有以下内容(只是连接到自己的管理控制器):

<%= 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>

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

4:Fixnum 的未定义方法 `id'

它说是因为这一行(在部分文件中):

<% div_for @user.object_id do %>

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

【问题讨论】:

    标签: ruby-on-rails fixnum


    【解决方案1】:

    您收到该错误是因为div_for 需要一个活动记录对象作为参数,它会调用id 方法。你传入一个 fixnum(@user.object_id 的结果),它不是活动记录对象,也没有 id 方法。

    所以传入@user 而不是@user.object_id 就可以了。

    此外,您应该使用user 而不是@user,rails 3 不再为部分设置实例变量。

    【讨论】:

    • 使用 @user 我得到错误:“为 nil 调用 id,错误地是 4 -- 如果你真的想要 nil 的 id,请使用 object_id”
    • @Joesavage1:如果您使用的是 rails 3,则需要使用 user 而不是 @user(如果不是,则无论如何都应该使用 user,因为那样适用于任何 Rails 版本)。
    • 非常感谢!使用“user”而不是“@user”是一种享受! :D
    【解决方案2】:

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

    【讨论】:

    • 使用 @user 我得到错误:“为 nil 调用 id,错误地是 4 -- 如果你真的想要 nil 的 id,请使用 object_id”
    • @user 然后为零。再次检查您的控制器以设置 @user 实例变量。我猜你不希望 @user 为 nil :)
    • 因为它是部分用户——我假设它已经知道@user 是什么。既然我想遍历用户,那么它肯定应该已经知道每个@user 是什么?如果我需要在控制器中添加一些东西 - 什么控制器(用户或管理员)
    • 不,如果您没有在控制器中定义@user,则视图/部分不能(也不应该)猜测@user。回答以下问题: 1. 您的视图与哪个控制器动作相关联? 2. 你在使用资源吗? 3. 你试过渲染 :partial => "your_partial", :object => @user 吗?这告诉部分必须渲染哪个对象
    【解决方案3】:

    您使用的不是对象,而是您当时使用的列或签证 varsa,您会收到这种错误。

    示例

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

    【讨论】:

      【解决方案4】:

      试试这个,它对我有用。

      @item.unit_of_measure.name 
      

      而不是

      @item.unit_of_measure_id.name
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-21
        • 1970-01-01
        • 2016-12-15
        • 2019-10-31
        • 2018-07-06
        相关资源
        最近更新 更多