ruby - Source of the New and Create Methods in Rails ActiveRecord while using Associations -
i wondering source (i.e., defining class or module) of new , create methods while using associations in rails.
for example, associations section of rails guides provides case:
class customer < activerecord::base has_many :orders, :dependent => :destroy end class order < activerecord::base belongs_to :customer end and enters command in console:
@order = @customer.orders.create(:order_date => time.now) (link rails guides section: http://guides.rubyonrails.org/association_basics.html)
but when type this:
@customer.orders.method(:create) i error:
undefined method `create' class `array'
you should have @ collection_proxy.rb here - https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/collection_proxy.rb
start seeing line 204, adequately explains how rails magically comes out methods build , create in associations.
they part of associations module , collectionproxy class.
edit:
of these dynamic methods arrive in rails, metaprogramming abilities in ruby. @customer.orders associations, collectionproxy class included in module , supplies these instance methods.
@foo = @customer.orders @foo.included_modules #=> list of `activerecord` , `activemodel` modules, includes. @foo.include? activerecord::associations #=> true thus, @foo gets honor methods build , create present there, unlike, array object.
Comments
Post a Comment