Неопределенный метод при доступе через ассоциацию и неинициализированную константу при попытке уничтожить с помощью: зависимых =>: уничтожить - PullRequest
3 голосов
/ 31 июля 2009

Я постоянно пытался погуглить эту ошибку, но безрезультатно. У меня в настоящее время есть эти модели

приложение / модели / survey.rb

class Survey < ActiveRecord::Base
  belongs_to :user
  has_attached_file :original, :default_url => "/public/:class/:attachment/:basename.:extension"
  has_many :sub_surveys, :dependent => :destroy
end

приложение / модели / sub_survey.rb

class SubSurvey < ActiveRecord::Base
  belongs_to :survey
  has_many :questions, :dependent => :destroy
end

приложение / модели / question.rb

class Question < ActiveRecord::Base
  belongs_to :sub_survey
  validates_presence_of :sub_survey
  acts_as_list :scope => :sub_survey
  #after_destroy :destroy_orphaned_choices

  has_many :answers, :dependent => :destroy
  has_many :choices, :dependent => :destroy
end

приложение / модели / choice.rb

class Choices < ActiveRecord::Base
  belongs_to :question
  validates_presence_of :question
end

приложение / модели / answer.rb

class Answer < ActiveRecord::Base
  belongs_to :question
  belongs_to :user
  belongs_to :game
  validates_uniqueness_of :question_id, :scope => [:user_id, :game_id]
end

Теперь, когда я пытаюсь уничтожить опрос, я получаю сообщение об ошибке

uninitialized constant Question::Choice

Это прослеживает через / vendor / rails / active * материал после опроса .destroy

Затем, когда я пытаюсь получить доступ к выбору из вопроса. При выборе появляется сообщение

undefined method `Choices' for #<Question:0xb7224f2c>

, который по какой-то причине имеет это поверх стека трассировки

vendor/rails/activerecord/lib/active_record/attribute_methods.rb:256:in `method_missing'
vendor/plugins/attribute_fu/lib/attribute_fu/associations.rb:28:in `method_missing'
app/views/answers/_answer.html.erb:7:in `_run_erb_47app47views47answers47_answer46html46erb'

Я использую attribute_fu при импорте опросов в формате xml, но я понятия не имею, почему трассировка вопроса. Выбор есть.

Я также пытался переименовать варианты в альтернативы выбора, но это не дало эффекта.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 31 июля 2009

Ваша таблица Choices уже имеет множественное имя, что может вызывать проблемы. В идеале эта таблица должна называться Choice, в противном случае ваша has_many :choices должна также указывать параметр class_name. Э.Г.

has_many :choices, :class_name => 'Choices'

Хотя я бы выбрал переименование класса и таблицы Choice, если вы можете.

Attachment_fu, вероятно, появляется в трассировке стека, потому что они переопределили или присвоили псевдониму метод method_missing для добавления своего собственного поведения. Об этом не обязательно беспокоиться.

0 голосов
/ 31 июля 2009

Я не уверен, почему вы получаете ошибку при уничтожении опроса, но вы получаете это

undefined method `Choices' for #<Question:0xb7224f2c>

потому что вы должны получить к нему доступ так:

question.choices # No capitalization

Я думаю, что это должно решить одну из проблем.

...