未记载的ActiveRecord爆炸方法

时间:2014-05-30 08:55:31

标签: ruby-on-rails activerecord rails-activerecord

有没有理由说ActiveRecord的爆炸方法是公开的,但没有记录,也没有在任何地方提到过?

例如,where!order!limit!和其他人都是公开的,并且由非爆炸对手使用。

我知道他们更改了查询对象而不是克隆(并且需要谨慎),但其他爆炸方法也是如此,这些方法通常都有很好的记录。

2 个答案:

答案 0 :(得分:4)

免责声明:我不是RoR的贡献者,所以如果有一些特定的RoR原因,我也不知道。

正如你所说,他们被非爆炸对手包裹着。例如,where方法检查方法是否具有正确数量的参数,并将当前范围应用于该方法。此外,它还提供了文档中概述的多态行为。

来源:https://github.com/rails/rails/blob/4c0d6680ee011b822e6beaa1ee84f835e89550a1/activerecord/lib/active_record/relation/query_methods.rb#L550

我的印象是,出于抽象原因,他们就是这种方式。爆炸方法实现了较低级别的功能,而非爆炸方法提供了更加用户友好的界面。至于为什么他们没有记录但是公开的,我认为图书馆的作者想要提供使用它们的选项,如果你真的知道你正在做什么。

答案 1 :(得分:2)

他们希望保持API不可变,请参阅此提交的评论:

https://github.com/rails/rails/commit/8c2c60511beaad05a218e73c4918ab89fb1804f0

至于所有未记录的方法(使用# :nodoc:),它们都是私有API的一部分。 您不应该使用它们,因为它们可以在没有警告的情况下被删除。

HTH