奇妙な問題があります。
私には2つのモデルのユーザーと役割があり、それらの間には多対多の関係があります。ユーザーのロールコレクション内で「Administrator」という名前のロールをフィルタリングしたいと思います。
モデルでは、このコード
puts self.roles.to_s
画面に出力:[ロールID:1、名前: "Administrator"、created_at: "2012-01-22 21:55:45"、updated_at: "2012-01-22 21:55:45"]
しかし、このコード
puts self.roles.find_by_name('Administrator').to_s
何も印刷しません。そしてこれ:
puts self.roles.find_by_name('Administrator').nil?
真に印刷します!
find_by_nameメソッドが機能しないのはなぜですか?コンソールで試してみましたが、うまくいきました。
私のコードスニペットは次のとおりです。
puts self.roles.to_s
puts self.roles.find_by_name('Administrator').to_s
puts self.roles.find_by_name('Administrator').nil?
そして、出力は次のとおりです。
[Role id: 1, name: "Administrator", created_at: "2012-01-22 21:55:45", updated_at: "2012-01-22 21:55:45"]
<none>
true
私は何が間違っているのですか?それは愚かなことでなければなりません。このコードはvalidateメソッドにあるため、ユーザーが保存される前に実行されます。