Ruby on Rails NameError: неинициализированная константа - PullRequest
7 голосов
/ 30 ноября 2010

Я только что установил новую связь миграции и модели, и в консоли при тестировании связи между таблицами я получаю следующую ошибку: NameError: uninitialized constant.

Кто-нибудь имеет какие-либо идеи, что не так?

Спасибо

Редактировать:

Вот ошибка

NameError: uninitialized constant Profile::ProfileNotification
  from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:105:in `const_missing'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2199:in `compute_type'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/core_ext/kernel/reporting.rb:11:in `silence_warnings'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/base.rb:2195:in `compute_type'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:156:in `send'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:156:in `klass'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:187:in `quoted_table_name'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/has_many_association.rb:97:in `construct_sql'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:21:in `initialize'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations.rb:1300:in `new'
  from C:/Ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations.rb:1300:in `profile_notifications'
  from (irb):3

Код из миграции ProfileNotification:

class CreateProfileNotifications < ActiveRecord::Migration
  def self.up
    create_table :profile_notifications do |t|
      t.integer :profile_id, :null => false
      t.integer :notification_id, :null => false
      t.string :notification_text
      t.boolean :checked, :default => false
      t.boolean :update_reply, :default => false
      t.boolean :opinion_reply, :default => false
      t.boolean :message_reply, :default => false
      t.boolean :pm, :default => false
      t.boolean :accepted_friend, :default => false
      t.boolean :accepted_supporter, :default => false
      t.timestamps
    end
  end

  def self.down
    drop_table :profile_notifications
  end
end

Ответы [ 2 ]

27 голосов
/ 30 ноября 2010

Ну, я понял проблему.Когда я запускал скрипт ruby ​​/ генерировал модель, я печатал скрипт ruby ​​/ генерировал модель ProfileNotifications.Когда я набирал скрипт ruby ​​/ генерировал модель ProfileNotification (единственное число), это работало.Соглашения об именах убивают меня.Спасибо за помощь.

3 голосов
/ 30 ноября 2010

Это ломается, потому что вы ссылаетесь на Profile::ProfileNotification, который не существует.

Rails считает, что это модель с именем ProfileNotification, расположенная в пространстве имен Profile, но ваш комментарий предполагает, что Profile - это другой класс модели, а не пространство имен.

На основе миграциивы уже написали, я думаю, вы не уверены в соглашении об именах Rails для отношений один-ко-многим.Вот как я думаю, это должно выглядеть:

class CreateNotifications < ActiveRecord::Migration
  def self.up
    create_table :notifications do |t|
      t.references :profile
      t.text :body
      t.boolean :checked, :default => false
      t.boolean :update_reply, :default => false
      t.boolean :opinion_reply, :default => false
      t.boolean :message_reply, :default => false
      t.boolean :pm, :default => false
      t.boolean :accepted_friend, :default => false
      t.boolean :accepted_supporter, :default => false
      t.timestamps
    end
  end

  def self.down
    drop_table :notifications
  end
end

class Profile < ActiveRecord::Base
  has_many :notifications
end

class Notification < ActiveRecord::Base
  belongs_to :profile
end

Теперь, когда вы выполните Profile.find(1).notifications, вы должны получить список связанных уведомлений для этого профиля.

Дополнительная информация: Ассоциации активных записей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...