Pourquoi suis-je obtenir cette “undefined method `#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_Collectionproxy_survey d'erreur”?
J'ai les associations suivantes:
class Question < ActiveRecord::Base
has_and_belongs_to_many :footnotes
has_and_belongs_to_many :pictures
has_many :fields, :dependent => :destroy
has_many :surveys, :dependent => :delete_all
belongs_to :input
belongs_to :element
has_many :screenshots
belongs_to :standard, :touch => true
belongs_to :product, :touch => true
belongs_to :condition, :class_name => "Field", :touch => true
end
class Product < ActiveRecord::Base
has_many :questions, :dependent => :destroy
has_many :reviews
has_and_belongs_to_many :orders
has_many :competitors
has_many :elements, :dependent => :destroy
has_many :fields
end
class Element < ActiveRecord::Base
has_many :questions
has_many :standards
belongs_to :product, :touch => true
end
class Standard < ActiveRecord::Base
has_many :questions
has_many :standards
belongs_to :review
end
class Footnote < ActiveRecord::Base
belongs_to :reference, :touch => true
has_and_belongs_to_many :questions
end
Pourquoi, alors, dois-je obtenir la suivante?
From: /Users/steven/Dropbox/Testivate/app/controllers/questions_controller.rb @ line 80 QuestionsController#update:
79: def update
=> 80: binding.pry_remote
81: @question = Question.find(params[:id])
82: @question.update_attributes(params[:question])
83: @question.update_columns :product_id => @question.element.product.id
84: flash[:notice] = "Question was successfully updated. (#{undo_link(@question)}.)" if @question.save
85: respond_with @question
86: end
[1] pry(#<QuestionsController>)> @question = Question.find(params[:id])
+----+-----+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| id | sta | des | ele | con | cre | upda | add | ins | act | ite | pro | inp | man | abo | res | lev | com | met |
+----+-----+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 1 | 1 | Is | 1 | | 201 | 2014 | tru | On | fal | 1 | 1 | | fal | | | 0 | fal | fal |
+----+-----+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
1 row in set
[2] pry(#<QuestionsController>)> params
=> {"utf8"=>"✓",
"_method"=>"patch",
"question"=>
{"description"=>"Is it readable?",
"element_id"=>"1",
"standard_id"=>"1",
"about"=>"",
"additive"=>"true",
"iterations"=>"1",
"instructions"=>"On the homepage, there is:",
"picture_ids"=>[""],
"footnote_ids"=>[""],
"active"=>"0",
"manual"=>"0"},
"commit"=>"Update Question",
"action"=>"update",
"controller"=>"questions",
"id"=>"1"}
[3] pry(#<QuestionsController>)> @question.save
=> true
[4] pry(#<QuestionsController>)> @question.update_attributes(params[:question])
NoMethodError: undefined method `#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Survey:0x0000010b21ce90>' for #<Question:0x0000010c0dda38>
from /Users/steven/.rvm/gems/ruby-2.1.0/gems/activemodel-4.0.2/lib/active_model/attribute_methods.rb:439:in `method_missing'
désolé pour le hors-sujet, mais comment avez-vous Soulever pour afficher les résultats de base de données dans une table?
Je suppose que c'est Hirb: github.com/cldwalker/hirb
Je suppose que c'est Hirb: github.com/cldwalker/hirb
OriginalL'auteur steven_noble | 2014-02-27
Vous devez vous connecter pour publier un commentaire.
Variable
En règle générale, vous recevez un
undefined method
erreur en essayant d'appeler une méthode sur un objet qui n'existe pas, ou est mal défini:Ressemble à quelque chose à faire avec cela est la cause de l'erreur
Erreur
Nous avons eu des problèmes comme ça avant, et c'est à cela:
Que par la Les Rails de la documentation:
Ce que cela signifie, c'est ce qui arrive est l'appel de la
proxy
objet (qui, en gros, associe le réel objets) dans vos méthodes. Fondamentalement, vous essayez d'appeler des méthodes sur un tableau (de la collection), plutôt que l'objet lui-mêmeVous auriez besoin de faire quelque chose comme ceci pour résoudre le problème:
Fixer
Je n'ai pas utilisé
levier
avant, mais je voudrais essayer ceci:@question.surveys.first
m'a fait réaliser que 'Proxy_Survey" était une référence à mon "has_many :enquêtes". Cela m'a amené à enquêter sur des rappels sur @question qui participe de cette relation. Et c'est là que j'ai trouvé le bug. Merci.OriginalL'auteur Richard Peck