Rails 3: NameError с ассоциацией - PullRequest
       20

Rails 3: NameError с ассоциацией

0 голосов
/ 25 августа 2011

Я новичок в 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>

Согласно учебнику, он должен был вернуться с пустым массивом. Я искал Google, этот сайт, Yahoo ответы, везде для возможного объяснения. Все только кажется мне правильным. Кто-нибудь может помочь?

1 Ответ

4 голосов
/ 25 августа 2011

Вам нужно сохранить результат Subject.find(1) в переменной перед его использованием, как и в случае с любым другим языком:

<b><i>subject =</i></b> Subject.find(1)

Тогда вы можете сделать subject.pages.В противном случае subject не относится ни к чему.

В качестве альтернативы, вы можете использовать _ для ссылки на возвращаемое значение последнего выражения.Таким образом, вы можете набрать Subject.find(1), а затем _.pages.

Если вы новичок в Ruby, я рекомендую пройти этот и, возможно, этот учебники если вы чувствуете себя смелым, это руководство .

...