Hi,
I have been trying for hours to figure out how to factor the following code
out of my Product model so that I can share it with other models. Since my
method_missing method is dependent on another model a plugin would not be
stand alone. I''ve tried to create a module and require, include, extend
Product but nothing I have tried works. Any suggestions?
Thanks!
Peter
require ''free_form.rb''
class Product < ActiveRecord::Base
has_and_belongs_to_many :categories
belongs_to :manufacturer
has_many :variations
has_many :images,
:order => :position,
:foreign_key => ''owner_id'',
:conditions => "owner_class = ''#{self.to_s}''"
# the following two has_and_belongs_to_many statements
# create a self-referential many-to-many relationship for cross sell
products
has_and_belongs_to_many :cross_sell_products,
:join_table => ''cross_sells'',
:foreign_key => ''product_id'',
:association_foreign_key => ''cross_sell_product_id'',
:class_name => ''Product'',
:order => ''cs_position''
has_and_belongs_to_many :cross_seller_products,
:join_table => ''cross_sells'',
:foreign_key => ''cross_sell_product_id'',
:association_foreign_key => ''product_id'',
:class_name => ''Product''
# :TRICKY: pm : The next statement works because only distinguishing virtual
attributes
# are linked in the join table.
# That is, the nondistinguising virtual attributes are not
''seen'' through
the join table.
has_and_belongs_to_many :distinguishing_virtual_attributes,
:class_name => ''VirtualAttribute''
has_and_belongs_to_many :optional_variation_groups
# stuff below is for the free_form table concept
# turns out it is very intertwined in the app and probably
# should not be a plugin
#
# however I would like to factor out the code below so that
# it can be mixed in to any model
# module_eval do
# extend FreeForm
# end
# require ''free_form.rb''
# extend FreeForm
#module_eval do
# has_many :virtual_attribute_values,
# :foreign_key => ''owner_id'',
# :conditions => "owner_class = ''#{self.to_s}''",
# :dependent => true
#end
has_many :virtual_attribute_values,
:foreign_key => ''owner_id'',
:conditions => "owner_class = ''#{self.to_s}''",
:dependent => true
def method_missing(method_id, *args, &block)
begin
# Try to execute the message with all superclass or module method_missing
methods
super
rescue NoMethodError
end # rescue NoMethodError
end # method_missing
end # class Product
_______________________________________________
Rails mailing list
Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails