【发布时间】:2013-05-10 00:07:49
【问题描述】:
如果新创建的记录是第一个满足某些条件的记录,我想检查after_create。所以我希望能够在after_create 回调中检查Model.where(...some condition...).count > 1。但是,由于某种原因,Rails 不允许这样做,我找不到任何解释。如果我在after_create 中查询Model.all.count,它总是返回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"}
【问题讨论】:
-
你能分享那个模型吗
-
能否也分享一下错误信息?
标签: ruby-on-rails-3 activerecord callback