はじめに: Rails 3.2; 'a' はオブジェクトであり、ActiveRecord モデルであり、これは has_many メッセージ (ActiveRecord モデルでもあります) ですが、それはおそらく私の質問にとってはあまり重要ではありません。
ここで質問です。なぜこれが、
irb(main):046:0> a.messages.respond_to?(:where) => true
しかし、これもまた、
irb(main):047:0> a.messages.methods.include?(:where) => false
?
何が起こっていますか?明らかに、ここにはいくつかの Ruby マジックがあり、オブジェクトを探索するこれらの方法で異なる結果が得られます。1つはArrayクラスを照会していると思いますが、もう1つは照会しています... :where (他のメソッドの中でも)に応答するものです。それを何と呼ぶべきかさえ知りません。私の推測では、それは Array クラスのオブジェクトにいくつかのものを照会していると思います...「混合」?(Ruby のコンテキストで使用される用語をよく耳にしたと思います...)