私は次のモデルを持っています:
class Person < ActiveRecord::Base
has_many :images
has_one :preference
end
class Image < ActiveRecord::Base
belongs_to :person
end
class Preference < ActiveRecord::Base
belongs_to :person
end
公開されているすべての画像を取得しようとしていると同時に、それらの画像を所有している人々を熱心に読み込もうとしています:
Image.find(:all, :conditions => ["images.person_id = ? AND preferences.image_privacy = ?", user.id, PRIVACY_PUBLIC],
:joins => [:person => :user_preference], :include => :person)
Rails は :include を好まないようです (:person が 2 つのモデルで参照されているためだと思います)。これは私が得るエラーです( :include オプションをドロップすると消えます):
"ActiveRecord::StatementInvalid: Mysql::Error: 一意のテーブル/エイリアスではありません: 'people'"
実際の JOIN コマンドを文字列として書き出して :include オプションに渡すことでこれを回避できますが、これは Rails-y ではないため、これを行うためのよりクリーンな方法があることを望んでいました。
どんな助けでも大歓迎です。
ありがとう!