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?
Répondre
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
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". –
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.
- 1. Ruby on Rails glisser-déposer ne fonctionnera pas
- 2. Ruby on Rails: « find_create_by_user »
- 3. Ruby on Rails d'application et Mongrel Ne pas démarrer
- 4. Ruby on Rails map.root ne semble pas fonctionner
- 5. Ruby on Rails d'installation
- 6. LocalJumpError (Ruby on Rails)
- 7. ruby on rails formulaire_pour
- 8. Ruby on Rails regex
- 9. OCIError (ruby on rails)
- 10. Ruby on Rails SQL Optimisations
- 11. Ruby on Rails symbole validation
- 12. Ruby On Rails ID personnalisé
- 13. Ruby on Rails, détection Javascript
- 14. CMS pour Ruby on Rails
- 15. Recherche dans Ruby On Rails
- 16. Ruby on Rails - Se connecter
- 17. Les erreurs de formulaire n'apparaissent pas dans Ruby on Rails
- 18. Ruby on Rails: formulaire select
- 19. Triple rejoindre Ruby on Rails
- 20. Ruby on Rails vs Django
- 21. ruby on rails Problème SQLite
- 22. Ruby on Rails MVC Question
- 23. Liste triable Ruby on Rails
- 24. Connexion/Inscription Ruby on Rails?
- 25. Ruby on Rails: Erreur rubygem
- 26. Quels sont vos livres Ruby on Rails préférés et pourquoi?
- 27. Association polymorphe Ruby on Rails
- 28. Ruby on Rails et CruiseControl.rb
- 29. Antipatterns avec Ruby on Rails
- 30. Analyser dans Ruby (on Rails)
code postal avec toutes les associations pertinentes. –
Le code a été publié. –
Modifiez votre question et postez le code ici, au lieu de l'afficher comme réponse ... puis supprimez votre réponse. –