Rails 3:NameError与关联

时间:2011-08-25 04:58:35

标签: ruby-on-rails ruby associations nameerror

我是Ruby的新手,刚刚谈到了协会。这是我的模特:

class Subject < ActiveRecord::Base

  has_many :pages

  scope :visible, where(:visible => true)
  scope :invisible, where(:visible => false)
  scope :search, lambda {|query| where(["name LIKE ?", "%#{query}%"])}
end

class Page < ActiveRecord::Base

  belongs_to :subject
  has_many :sections
  has_and_belongs_to_many :editors, :class_name => "AdminUser"

end

我的教程(psh ..它知道什么)告诉我在找到第一个主题后键入“subject.pages”,如下所示:

Loading development environment (Rails 3.0.10)
irb(main):001:0> Subject.find(1)
=> #<Subject id: 1, name: "Initial Subject", position: 1, visible: true, created
_at: "2010-09-29 20:51:09", updated_at: "2010-09-29 21:07:42">
irb(main):002:0> subject.pages
NameError: undefined local variable or method `subject' for main:Object
        from (irb):2
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/comma
nds/console.rb:44:in `start'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/comma
nds/console.rb:8:in `start'
        from C:/Ruby192/lib/ruby/gems/1.9.1/gems/railties-3.0.10/lib/rails/comma
nds.rb:23:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
irb(main):003:0>

根据教程,它应该返回一个空数组。我搜索谷歌,这个网站,雅虎答案,到处都有可能的解释。一切似乎对我来说都是正确的。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:4)

您需要在使用之前将Subject.find(1)的结果存储到变量中,就像使用任何语言一样:

subject = Subject.find(1)

然后你可以subject.pages。否则subject不会引用任何内容。

或者,您可以使用_来引用最后一个表达式的返回值。因此,您可以输入Subject.find(1),然后输入_.pages

如果您是Ruby的新手,我建议您浏览thisthis教程,如果您有勇气,this guide