ruby-on-rails – 当用作param时的’*`的含义(不像* arg,只是*)[复制]

参见英文答案 > naked asterisk as parameter in method definition: def f(*)1个
当我阅读Rails代码时,我发现了这一点
def save(*)
  create_or_update || raise(RecordNotSaved)
end

*做什么? :o
我知道当我们像* args一样使用它时会发生什么,但在这种情况下,它只是简单*.

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

解决方法

在这种特定情况下,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

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...