8

Railsのコードを読んでいたらこんなの見つけた

def save(*)
  create_or_update || raise(RecordNotSaved)
end

は何をし*ますか?:O のように使用するとどうなるかはわかっています*argsが、この場合は単純*です。

参照https://github.com/rails/rails/blob/master/activerecord/lib/active_record/persistence.rb#L119

4

2 に答える 2

8

これは、パラメーター名で使用した場合と同じことを意味します。つまり、残りのすべての引数をむさぼり食うということです。ただし、それらをバインドする名前がないため、引数にアクセスできません。つまり、任意の数の引数を取りますが、それらをすべて無視します。

引数を実際に使用する 1 つの方法があることに注意してください引数リストなしで呼び出すとsuper、引数はそのままスーパークラス メソッドに転送されます。

于 2013-02-18T15:26:47.613 に答える
2

この特定のケースでは、save は引数を取りません。それが裸のスプラットで起こることです。ただし、お気づきかもしれませんが、ActiveRecordモデルで save を呼び出すと、このメソッドが次のようにオーバーライドされるため、オプションを受け入れることができActiveRecord::Validationsます。

https://github.com/rails/rails/blob/v3.1.3/activerecord/lib/active_record/validations.rb#L47

# The validation process on save can be skipped by passing <tt>:validate => false</tt>. The regular Base#save method is
# replaced with this when the validations module is mixed in, which it is by default.
def save(options={})
 perform_validations(options) ? super : false
end
于 2013-02-18T15:11:12.690 に答える