Je suis mise à niveau d'un rail 2.3 application aux rails 3.0.3Mise à niveau vers Rails 3, extensions d'association has_many ne fonctionne plus avec les étendues
je les extensions d'association suivantes et étendues sur mon Product
modèle
has_many :related_products, :through => :product_related_products do
[:alternative, :complement, :bigger_pack, :higher_quantity, :lower_quality].each do |meth|
define_method(meth) {
find :all, :conditions => ["product_related_products.#{meth} = ?", true] }
end
end
scope :visible, where(:hidden => false)
le concept tiré de: http://guides.rubyonrails.org/association_basics.html#association-extensions
Quand j'appelle l'association dans une chaîne
@product.related_products.visible.alternative
Il fonctionne très bien dans des rails 2.3, je reçois l'erreur suivante dans Rails 3:
undefined method `alternative' for #<ActiveRecord::Relation:0x1047ef978>
activerecord (3.0.3) lib/active_record/relation.rb:371:in `method_missing'
app/views/products/show.html.haml:18:in `_app_views_products_show_html_haml___1131941434_2185376080_0'
Je suppose que ses quelque chose à voir avec la nouvelle relation qui est créé, mais je ne suis pas sûr de savoir comment procéder, le guide des rails suggère toujours que cette méthode est correcte.
// modifier après que les modifications proposées par François:
Les définitions de classe sont les suivantes:
class Product < ActiveRecord::Base
has_many :product_related_products
has_many :related_products, :through => :product_related_products
end
class ProductRelatedProduct < ActiveRecord::Base
belongs_to :product
belongs_to :related_product, :class_name => "Product"
scope :with_attribute, lambda {|attr| where(attr, true)}
end
@product.related_products.with_attribute(:alternative) raises:
NoMethodError Exception: undefined method `with_attribute' for #<Class:0x108fbd8b8>
Merci pour votre réponse, cependant, aucune solution ne fonctionne. – Rob
Je reçois les erreurs suivantes # 1 NoMethodError Exception: méthode non définie with_attribute 'pour # # 2 NoMethodError Exception: méthode non définie alternative' pour # –
Rob
J'ai mis à jour la question d'inclure les classes après vos suggestions – Rob