2009-07-31 6 views
3

J'ai essayé de googler cette erreur, mais en vain. J'ai actuellement ces modèlesMéthode non définie lors de l'accès via l'association et la constante non initialisée lors de la tentative de destruction avec: dependent =>: destroy

app/modèles/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 

app/modèles/sub_survey.rb

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

app/modèles/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 

app/models/choice.rb

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

app/modèles/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 

Maintenant, lorsque je tente de détruire une enquête, je reçois une erreur

uninitialized constant Question::Choice 

que des traces à travers/fournisseur/rails/actif * choses après le survey.destroy

Puis, quand je tente d'accéder à des choix de question.Choices, je reçois une erreur

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

qui, pour une raison quelconque a cette au-dessus de la trace pile

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' 

Je n'utilise attribute_fu lors de l'importation des enquêtes en format XML, mais je ne sais pas pourquoi la trace de question.Choices a. J'ai également essayé de renommer les choix pour choisir des alternatives, mais cela n'a pas eu d'effet.

Des idées?

Répondre

4

Votre table Choices a déjà un nom pluralisé qui peut causer des problèmes. Idéalement, cette table doit être appelée Choice, sinon votre has_many :choices doit également spécifier l'option class_name. Par exemple.

has_many :choices, :class_name => 'Choices' 

Bien que j'opte pour renommer la classe et une table Choice si vous le pouvez. Attachment_fu apparaît probablement dans la trace de la pile car ils ont substitué ou aliasé la méthode method_missing pour ajouter leur propre comportement.

Ce n'est pas nécessairement quelque chose à se préoccuper.

+0

Ah ça a marché! Merci beaucoup! Je vais essayer de garder cela à l'esprit. –

0

Je ne sais pas pourquoi vous obtenez l'erreur lors de la destruction d'une enquête, mais vous obtenez ce

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

parce que vous devriez y accéder comme ceci:

question.choices # No capitalization 

Je pense Cela devrait résoudre l'un des problèmes.

+0

A travaillé! Je vous remercie.Définir l'erreur à la même chose, que le commentaire ci-dessous fixé. –

Questions connexes