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

-> "arrow" がリテラル ラムダを作成することは理解していますが (または私は理解していますか?)、どのように、またはなぜこれが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 つのパラメーターが必要です。

2 番目のパラメーターはscopeパラメーターで、4.0.0 バージョンで導入されました。

4.0.0 のコードはこちらscopeパラメーターを追加するコミットはこちら

Rails 3.2.12を使用している可能性が高いため、機能しません。

于 2013-03-14T18:26:19.537 に答える