2009-06-29 7 views
1

Okay. Also habe ich drei Modelle, a, b und c. a has_one c, b has_many cs und c gehört zu a und b. Wenn ich in einer Methode von b auf "cs" referenziere, kommt es gut an. Aber wenn ich in einer Methode von a auf "c" referenziere, kann es die Referenz nicht finden; es heißt "c" ist eine "undefinierte lokale Variable oder Methode". I wissen,, dass c Objekte erstellt werden, weil sie in der MySQL-Datenbank angezeigt werden, und ich kann sie vom b-Modell perfekt zugreifen, aber ich kann nicht auf sie von dem Modell zugreifen.Warum kann Ruby on Rails diese Klasse nicht finden?

+0

Postleitzahl mit allen relevanten Zuordnungen. –

+0

Code wurde veröffentlicht. –

+1

Bearbeiten Sie Ihre Frage und geben Sie den Code dort ein, anstatt ihn als Antwort zu posten ... dann löschen Sie Ihre Antwort. –

Antwort

0

Klasse A < Activerecord :: Base has_one: c,: abhängig =>: zerstören

Klasse B < Activerecord :: Base has_many: c

Klasse C < Activerecord :: Base belongs_to : a belongs_to: b

Methode in as_controller erstellen:

def erstellen @a = a.new (params [: a]) params [: b] [: venue_id] = get_venue_id_for_b es sei denn params [: location] [: name] .blank? @ a.user = @user @ a.b = B.neu (params [: b]) @b = @ a.b @ b.valid? @ a.valid?

respond_to do |format| 
    if @a.valid? and @b.valid? 
    if (@a.duplicate? or @a.save) and @b.save 
     flash[:notice] = 'a was successfully created.' 
     format.html { redirect_to a_url(@a) } 
     format.xml { head :created, :location => a_url(@a) } 
    else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml } 
    end 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @a.errors.to_xml and @b.errors.to_xml } 
    end 
end 

Ende

Diese Methode innerhalb Modell B funktioniert:

def q setzt cs.class Ende

Diese Methode innerhalb Modell A nicht funktioniert:

def q setzt c.class Ende

+0

Es ist immer noch schwer zu sehen, was los ist, ich nehme an, Sie haben Ihre Fremdschlüssel korrekt angegeben. Z.B. Die C-Tabelle sollte 2 Schlüssel "a_id" und "b_id" haben. In Ihrem C-Modell macht ein "has_many: c" keinen Sinn. Sie würden die Pluralform "has_many: cs" verwenden. –

1

Ihr Problem kommt von Ihrer Spezifikation der Beziehungen.

Es scheint, Sie sind für etwas in dieser Richtung

class a < ActiveRecord::Base 
    has_one :c, :through=>:b 
end 


class b < ActiveRecord::Base 
    has_many :c 
end 


class a < ActiveRecord::Base 
    belongs_to :b 
end 

suchen, erlauben sollten Sie die Abfrage korrekt ausgeführt wird. Hoffe das hilft.