0

我想知道在 Rails 中使用关联时 New 和 Create 方法的来源(即定义类或模块)是什么。

例如,Rails 指南的关联部分提供了这种情况:

class Customer < ActiveRecord::Base
  has_many :orders, :dependent => :destroy
end

class Order < ActiveRecord::Base
  belongs_to :customer
end

然后在控制台输入这个命令:

@order = @customer.orders.create(:order_date => Time.now)

(链接到 Rails 指南部分: http: //guides.rubyonrails.org/association_basics.html

但是当我输入这个时:

@customer.orders.method(:create)

我得到错误:

undefined method `create' for class `Array'
4

1 回答 1

0

你应该看看collection_proxy.rb这里 - https://github.com/rails/rails/blob/master/activerecord/lib/active_record/associations/collection_proxy.rb从第 204 行
开始看,它充分解释了 Rails 如何神奇地出现和in 关联的 方法。buildcreate

它们是Associations模块和CollectionProxy类的一部分。

编辑:由于 Ruby 中的元编程能力
,这些动态方法中的大多数都到达了 Rails 。也是一个,是这个模块中包含的一个类,因此提供了这些实例方法。@customer.ordersAssociationsCollectionProxy

@foo = @customer.orders
@foo.included_modules 
#=> List of all `ActiveRecord` and `ActiveModel` modules, it includes.
@foo.include? ActiveRecord::Associations
#=> True

因此,@foo使用类似的方法获得荣誉,buildcreate这些方法存在于那里,不像,只是另一个Array对象。

于 2013-05-13T07:01:46.000 回答