【问题标题】:RoR: Instance Variable Interpreted as Missing MethodRoR:实例变量解释为缺失方法
【发布时间】:2013-12-28 10:04:55
【问题描述】:

我正在学习教程,根据代码,我应该能够调用以下代码而不会出现错误:

page = Page.find(1) # works
page.sections.size # Does not work

subject = Subject.find(1) # works
subject.pages.size # works

一个部分属于_一个页面,一个页面属于_一个主题。我正在尝试计算与相应页面关联的部分的数量(在这种情况下,页面:id => 1)。

错误是Undefined Method,但我不是在访问方法,而是在访问实例变量。我已经查看了我的模型和控制器,没有为 subject.pages.size 定义范围或声明,但它可以毫无怨言地工作。我很困惑为什么它不能为它的孩子工作,page.sections 当我尝试做同样的操作时。

诊断信息(来自 CLI 使用 pry)可以在这里找到:http://pastebin.com/xKKvSPkz

数据库架构:http://pastebin.com/hiAhXGt8

【问题讨论】:

  • 你的page 模型中有has_many :sections 吗?
  • 嗯,男孩,我觉得自己像个白痴。我忘了声明关系(双向)Doh!谢谢,薇。请提交您的回复作为答案,以便我给予您信任。
  • 仅供参考,您正在执行一个方法。该方法恰好是返回实例变量值的方法。请记住,如果您没有看到 @ 符号,则说明您不是在查看实例变量。

标签: ruby-on-rails pry


【解决方案1】:

确保定义了pagesection 之间的关系:

class Page < ActiveRecord::Base
  has_many :sections
end

class Section < ActiveRecord::Base
  belongs_to :page
end

有了这种关系,以下应该可以按预期工作:

page = Page.find(1)
page.sections.size

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多