Setup: Rails 3 RC2, Ruby 1.9.2 p0 (également essayé on Rails 3 bêta 4, Ruby 1.8.7 p174).Recueillir sur une belongs_to augmentation NoMethodError: méthode non définie ajouter » pour zéro: NilClass
J'ai pas la configuration du panier de base:
Order has_many :order_items
Order has_many :products, :through => :order_items, :dependent => :restrict
Product has_many :order_items
Product has_many :orders, :through => :order_items, :dependent => :restrict
OrderItem belongs_to :product
OrderItem belongs_to :order
Après la création de produits et OrderItems je la tête dans la console et effectuez les opérations suivantes:
Order.last.order_items.collect { |item| { :name => item.product.name, :quantity => item.quantity } }
et je reçois une erreur:
NoMethodError: undefined method `add' for nil:NilClass
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activesupport-3.0.0.rc2/lib/active_support/whiny_nil.rb:48:in `method_missing'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/bullet-2.0.0.rc1/lib/bullet/detector/n_plus_one_query.rb:21:in `create_notification'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/bullet-2.0.0.rc1/lib/bullet/detector/n_plus_one_query.rb:14:in `call_association'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/bullet-2.0.0.rc1/lib/bullet/active_record3.rb:78:in `load_target'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_proxy.rb:118:in `reload'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations.rb:1451:in `block in association_accessor_methods'
from (irb):6:in `block in irb_binding'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_collection.rb:430:in `block in method_missing'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_proxy.rb:216:in `block in method_missing'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_proxy.rb:216:in `collect'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_proxy.rb:216:in `method_missing'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/activerecord-3.0.0.rc2/lib/active_record/associations/association_collection.rb:430:in `method_missing'
from (irb):6
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0.rc2/lib/rails/commands/console.rb:44:in `start'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0.rc2/lib/rails/commands/console.rb:8:in `start'
from /Users/tcoop/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.0.rc2/lib/rails/commands.rb:23:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
je sais que les produits existent et que le order_item est valide ... Si je fais ce qui suit:
ruby-1.9.2-p0 > Order.last.order_items.collect { |item| { :name => item.product_id, :quantity => item.quantity } }
Puis-je obtenir ce que j'attendais: => [{:name=>3, :quantity=>1}, {:name=>1, :quantity=>4}]
Je ne suis pas Bien sûr, pourquoi appeler un attribut sur l'objet associé (item.product.name) provoque-t-il des erreurs? Quelqu'un peut-il nous éclairer là-dessus?
EDIT Je viens d'ajouter ce qui suit comme un commentaire, mais la mise en forme est horrible ...
J'ai aussi oublié de mentionner que cela se produit uniquement avec il y a plus de 1 ordre_items. 1 article de commande fonctionne comme prévu. ET ce qui suit semble résoudre mon problème ...
products = order.order_items.collect do |item|
uid = item.product.uid
{ :ProductUID => uid, :Quantity => item.quantity }
end
Merci
J'ai aussi oublié de mentionner que cela se produit uniquement avec il y a plus de 1 ordre_items. 1 article de commande fonctionne comme prévu. ET ce qui suit semble résoudre mon problème ... products = order.order_items.collect do | item | # affecter l'attribut de produit à une variable uid = item.product.uid {: ProductUID => uid,: Quantity => item.quantity} end –
Apparemment ma dernière modification (définition de l'UID en tant que variable locale) uniquement travaillé pour 2 articles de commande ... Plus et je reçois les mêmes erreurs qu'avant! –