after_create
新しく作成されたレコードが、何らかの条件を満たす最初のレコードであるかどうかを確認したいと思います。Model.where(...some condition...).count > 1
だから、after_create
コールバックでチェックできるようにしたい。ただし、Rails は何らかの理由でこれを許可しないため、その理由を説明することはできません。でクエリを実行するとModel.all.count
、after_create
常に 1 が返されます。1 つのレコードは、作成したばかりのレコードです。after_create メソッドで生の SQL を実行すると、正しい情報を取得できます。を使用してクエリを実行できないのはなぜModel.where(...)
ですか?
編集:
以下の質問への回答です。エラー メッセージはありません。以下は、クラスとログ出力の例です。私が見落としているのはばかげているに違いないと感じています。助けに感謝します。
class ExperiencePhoto < ActiveRecord::Base
belongs_to :experience, counter_cache: true
belongs_to :photo
after_create :set_cover_photo
def self.find_or_create(params)
where(params).first_or_create
end
protected
def set_cover_photo
logger.debug self.inspect
logger.debug ExperiencePhoto.all.inspect
logger.debug ExperiencePhoto.all.count.to_s
logger.debug ActiveRecord::Base.connection.execute("select count(*) from experience_photos")[0].inspect
end
終わり
これを呼び出す:
ExperiencePhoto.find_or_create(photo_id: photo_id, experience_id: self.id)
次の出力が得られます。
#<ExperiencePhoto id: 183, experience_id: 93, photo_id: 106>
[#<ExperiencePhoto id: 183, experience_id: 93, photo_id: 106>]
1
{"count"=>"168"}