2009-07-31 4 views
3

Ich habe versucht, diesen Fehler beharrlich zu googeln, aber ohne Erfolg. Im Moment habe ich diese ModelleNicht definierte Methode beim Zugriff durch Verknüpfung und nicht initialisierte Konstante beim Versuch, mit zu zerstören: dependent =>: destroy

app/models/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/models/sub_survey.rb

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

app/models/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/models/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 

Jetzt, wenn ich versuche, eine Umfrage zu zerstören, bekomme ich einen Fehler

uninitialized constant Question::Choice 

dass Spuren durch/vendor/rails/aktiv * Sachen nach die survey.destroy

Dann, wenn ich versuche, Entscheidungen für den Zugriff auf von question.Choices, bekomme ich einen Fehler

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

aus irgendeinem Grunde, das diese auf der Oberseite des Trace-Stack

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' 

ich attribute_fu verwenden muss, wenn Umfragen im XML-Format zu importieren, aber ich habe keine Ahnung, warum die Spur von question.Choices hat.

Ich habe auch versucht, Wahlmöglichkeiten zu Wahlalternativen umzubenennen, aber das hatte keine Wirkung.

Irgendwelche Ideen?

Antwort

4

Ihre Choices Tabelle hat bereits einen Pluralnamen, der Probleme verursachen kann. Idealerweise sollte diese Tabelle Choice heißen, ansonsten sollte Ihre has_many :choices die class_name Option auch angeben. Z.B.

has_many :choices, :class_name => 'Choices' 

Obwohl ich für die Umbenennung der Klasse und Tabelle entscheiden würde Choice wenn Sie können.

Attachment_fu tritt wahrscheinlich im Stack-Trace auf, weil sie die method_missing-Methode überschrieben oder aliasiert haben, um ihr eigenes Verhalten hinzuzufügen. Es ist nicht unbedingt etwas, worüber man sich Sorgen machen muss.

+0

Ah, das hat funktioniert! Vielen Dank! Ich werde versuchen, das im Hinterkopf zu behalten. –

0

Ich bin mir nicht sicher, warum Sie den Fehler erhalten, wenn eine Umfrage zu zerstören, aber Sie bekommen diese

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

, weil Sie es so den Zugriff auf sein sollte:

question.choices # No capitalization 

Ich denke, das sollte eines der Probleme lösen.

+0

Arbeitete! Vielen Dank.Setzen Sie den Fehler auf den gleichen Wert, der unten im Kommentar behoben wurde. –

Verwandte Themen