1

在尝试解决一个几乎不相关的问题时,我在这个 Rails ActiveRecord 测试文件中遇到了一些代码:http: //github.com/rails/rails/blob/master/activerecord/test/models/post.rb

belongs_to :author_with_posts, -> { includes(:posts) }, :class_name => "Author", :foreign_key => :author_id

我知道(或者我知道吗?)-> “箭头”创建了一个文字 lambda,但我不知道这是如何或为什么这是belongs_to(name, options = {})的有效参数集。我会期待这样的事情:

belongs_to :author_with_posts, <something that results in a key/value pair>, :class_name => "Author", :foreign_key => :author_id

上述文件充满了这种构造的实例,它显然工作正常,但我不知道为什么。我尝试在我自己的(显然)类似的 ActiveRecord 关联中使用 -> 语法,但它不起作用,我得到了这个:

ArgumentError: wrong number of arguments(3 for 2)

看来我要么错过了一些非常基本的东西吗?或者 post.rb 代码可能比我们看到的更多?

4

1 回答 1

3

实际上belongs_to在最新版本中需要 3 个参数。

第二个参数是scope参数,在4.0.0版本中已经引入。

4.0.0 的代码在这里,添加scope参数的提交在那里

它对您不起作用,因为您很可能使用 rails 3.2.12。

于 2013-03-14T18:26:19.537 回答