2009-06-29 4 views
1

OK. J'ai donc trois modèles, a, b et c. a has_one c, b a_many cs, et c appartient à a et b. Quand je référence "cs" dans une méthode de b, ça sort bien. Mais quand je référence "c" dans une méthode de a, il ne peut pas trouver la référence; il est dit que "c" est une "variable ou méthode locale non définie". I sais que les objets c sont créés, car ils apparaissent dans la base de données MySQL, et je peux y accéder parfaitement à partir du modèle b, mais je ne peux pas y accéder à partir d'un modèle.Pourquoi Ruby on Rails ne trouve-t-il pas ce cours?

+0

code postal avec toutes les associations pertinentes. –

+0

Le code a été publié. –

+1

Modifiez votre question et postez le code ici, au lieu de l'afficher comme réponse ... puis supprimez votre réponse. –

Répondre

0

classe A < ActiveRecord :: Base has_one: c,: dependent =>: détruire

classe B < ActiveRecord :: Base has_many: c

classe C < ActiveRecord :: Base belongs_to : a belongs_to: b

méthode Create dans as_controller:

def créer @a = a.new (paramètres [: a]) params [: b] [: lieu_id] = get_venue_id_for_b à moins que params [: lieu] [: nom] .blank? @ a.user = @user @ a.b = B.nouveau (paramètres [: 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 

fin

Cette méthode dans le modèle B fonctionne:

def q met fin cs.class

Cette méthode dans le modèle A ne fonctionne pas:

def q met c.classe fin

+0

Il est toujours difficile de voir ce qui se passe, je suppose que vous avez correctement vos clés étrangères. Par exemple. la table C doit avoir 2 clés "a_id" et "b_id". Cela étant dit, dans votre modèle C, un "has_many: c" n'a pas de sens. Vous utiliseriez le pluriel "has_many: cs". –

1

Votre problème vient de votre spécification des relations.

Il semble que vous cherchez quelque chose le long de ces lignes

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 

Cela devrait vous permettre d'exécuter la requête correctement. J'espère que cela t'aides.