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
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
これは、パラメーター名で使用した場合と同じことを意味します。つまり、残りのすべての引数をむさぼり食うということです。ただし、それらをバインドする名前がないため、引数にアクセスできません。つまり、任意の数の引数を取りますが、それらをすべて無視します。
引数を実際に使用する 1 つの方法があることに注意してください。引数リストなしで呼び出すとsuper
、引数はそのままスーパークラス メソッドに転送されます。
この特定のケースでは、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