我想检查after_create
新创建的记录是否是第一个满足某些条件的记录。所以我希望能够Model.where(...some condition...).count > 1
在after_create
回调中检查 , 。但是,由于某种原因,Rails 不允许这样做,我找不到任何解释。如果我查询, Model.all.count
, in after_create
,它总是返回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"}