我想检查after_create
如果新创建的记录是第一个满足某些条件的记录。所以我希望能够在after_create
回调中检查Model.where(...some condition...).count > 1
。但是,由于某种原因,Rails不会允许这样做,我也找不到任何解释。如果我查询,Model.all.count
,在after_create
,它总是返回1,并且一个记录是我刚刚创建的记录。如果我在after_create方法中执行原始SQL,那么我可以检索到正确的信息。为什么我不能使用Model.where(...)
执行查询?Rails 3:Model.all.count在after_create方法中总是返回1
编辑:
回答下面的问题。没有错误消息。以下是类和记录输出的示例。我觉得这一定是愚蠢的,我忽略了,我很感激帮助。
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"}
您可以共享模型 – 2013-05-10 05:04:04
你也可以分享错误消息? – 2013-05-10 17:49:00