【问题标题】:Rails Undefined method for ni:NilClass Error?Rails未定义ni的方法:NilClass错误?
【发布时间】:2012-06-19 20:08:19
【问题描述】:

我有一个 rails 应用程序,其中我有 has_many 和 belongs_to 关联。但是我在尝试检索元素时遇到了问题。我的模型是事件、评论和投票。 事件有多个评论和投票。当然评论和投票属于一个事件。

我的架构是

    create_table "events",
        t.string   "etime"
        t.integer  "eid"
      end
    create_table "votes",
        t.integer  "eventid"
        t.string  "userid"
        t.integer  "event_id"
    end 

协会:

    class Event < ActiveRecord::Base
    has_many :comments
    has_many :votes
    end
    class Votes < ActiveRecord::Base
        belongs_to :event
    end

我正在尝试查看对活动的所有投票。控制器动作是:

    @events = Event.all
@events.each do |event|
    event.votes.each do |vote|
        respond_to do |format|
            format.html
        end
    end 
end

查看和错误行:

    <%= @vote.userid %>

我收到错误“未定义的方法“用户 ID”进行投票”。在我的控制器中,我渲染了我的 eventid 并且它起作用了。因此,当我在视图中执行此操作时,这似乎是一个问题.. 知道我可能做错了什么吗?我完全迷失了这个

【问题讨论】:

  • 应该是event_id,但你真的是要显示id还是投票?
  • 我正在尝试投票。我的投票模型中有另一个字段,用户 ID。我正在尝试同时显示 event_id 和 userid。我删除了用户 ID,因为我之前在使用另一个代码时遇到了问题。但是我又加了一遍。同样的错误(如果我删除 vote.eventid)

标签: ruby-on-rails null rails-models


【解决方案1】:

可能就像使用event_id 而不是eventid 一样简单。

运行rails console 并在那里玩耍总是值得的。您通常可以自动完成方法。

v = Vote.new
v.event<tab to get options>

【讨论】:

  • 不,还是同样的错误。它在控制器中工作,但是当我转到我的视图时它失败了
【解决方案2】:

在某些地方你搞错了,你的表迁移,就像你的外键名称一样,你的主键也是错误的。

在标准情况下,所有模型的主键都是 id,只有 id

为了与其他模型关联,例如,belongs_to :event 关联,您的投票模型需要一个 event_id 列。这些是导轨标准

假设,您的关联/列是正确的,您得到的错误是因为您的 <strong>@vote</strong> 对象是 nil ,您需要在控制器中分配/初始化 @vote 变量以使用你似乎没有做的视图。

【讨论】:

  • 关联完成后,自动创建了event_id。但是我在代码中添加了该字段。我添加了@vote 变量,但没有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2020-01-16
  • 1970-01-01
相关资源
最近更新 更多