2

私は 3.2.13 を実行しており、標準の "railstutorial.org" に従っています。私はまだ、C++/Java プログラミングの考え方から切り替えて、通常の呼び出し規約を理解しようとしているところです。

クラス ( User < ActiveRecord::Base) を次のように使用できます。

User.create(email: "email", password: "password", password_confirmation: "password")

メソッドのドキュメントは、それが非推奨であることを示しています。def createまた、私の ActiveRecord gem ソースにはa への参照がありません。

呼び出しはハッシュを使用していないため、その種類の呼び出しの名前は何ですか? 引数が中括弧で囲まれている場合も同じですか?

4

2 に答える 2

4

ここで2つの質問がされています。

最初の質問: メソッドの非推奨

この commitで変更が行われました。

createメソッドはから削除され、という別のモジュールにActiveRecord::Base挿入ActiveRecord::Persistenceれました。

APIDockがあなたに言ったことに関して...メソッドは「非推奨または移動」でした。候補リストの途中まで見ると、 が表示されますActiveRecord::Persistence#create。これは、メソッドが移動した場所です。

ActiveRecord::Persistence#create内部で使用されることに注意してください。アプリケーション コードでcreateActiveRecordモデル(オブジェクトではない) を呼び出すときは、 を呼び出してActiveRecord::Relation#createいます。

ActiveResource::Base#createRails 2.0 で導入されたもので、ActiveRecord とは無関係です。

2 番目の質問: 引数としてのハッシュ

ソースを調べるとActiveRecord::Relation#create、次のように表示されます。

# File activerecord/lib/active_record/relation.rb, line 85
def create(*args, &block)
  scoping { @klass.create(*args, &block) }
end

splat 引数を参照してください*args。これにより、残っている引数がいくつあってもすべて に渡すように Ruby に指示しargsます。Ruby/Rails のダックタイピング マジックは、一連のキーと値のペアを見て、それがハッシュであると想定します。

Rails は、すべての引数を括弧で囲むことについて緩いのと同様に、引数のハッシュに中括弧を要求するという点で少し緩いです。通常、一連のキーと値のペアを渡すと、Rails はハッシュを推測します。form_forこれは、複雑なメソッドのように複数のハッシュを渡すときに問題を引き起こすことがあります。

中かっこがない場合に不安定な動作が発生する場合は、中かっこを挿入します。ハッシュを明確に定義すると、適切な動作を保証できます。

Ruby スプラットの詳細については、こちらをご覧ください。

于 2013-04-11T01:42:06.940 に答える