0

Rails でアソシエーションを使用しているときに、New メソッドと Create メソッドのソース (つまり、クラスまたはモジュールの定義) が何であるかを考えていました。

たとえば、Rails ガイドの Associations セクションでは、次のケースが提供されています。

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やアソシエーション などのメソッド。
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のようなメソッドで名誉を取得します。buildcreateArray

于 2013-05-13T07:01:46.000 に答える