代码之家  ›  专栏  ›  技术社区  ›  Luke

ActiveRecord在生产环境中运行不同的查询?

  •  3
  • Luke  · 技术社区  · 17 年前

    我的类层次结构如下所示:

    class Post < ActiveRecord::Base; end
    class Project < Post; end
    class ProjectDesignWall < Project; end
    

    @projects = Project.find(:all, :include => [:project_image_photos,:user])
    

    在里面 development

    SELECT * FROM `posts` WHERE ( (`posts`.`type` = 'Project' ) ) ORDER BY originally_created_at DESC
    

    production 模式,即使使用相同的数据库和数据,也会导致以下查询:

    SELECT * FROM `posts` WHERE ( (`posts`.`type` = 'Project' OR `posts`.`type` = 'ProjectDesignWall' ) ) ORDER BY originally_created_at DESC
    

    有人知道为什么会发生这种情况吗?如果没有彻底解决问题,有没有办法让它至少保持一致的行为?

    2 回复  |  直到 17 年前
        1
  •  5
  •   Ryan Bigg Andrés Bonilla    17 年前

    因为在生产环境中,所有类都是一次加载的。当加载所有类时,它意识到ProjectDesignWall是Project的一个子类,因此收集了所有类。

        2
  •  2
  •   Gdeglin    17 年前

    这里有一个关于此错误的公开票证: https://rails.lighthouseapp.com/projects/8994/tickets/188-single-table-inheritance-bug-only-in-production-environment

    https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2389-sti-changes-behavior-depending-on-environment

    引述:

    父类

    类ProjectFeedEvent<FeedEvent

    def self.subclasses
      [ProjectAddedEvent]
    end  
    

    终止

    http://www.matthewpaulmoore.com/ruby-on-rails-code-quality-checklist#sti

    我个人在我的公司使用STI的经验是,起初它似乎非常有用,但随着时间的推移,我们确定我们根本不需要它来保证复杂性。从那时起,我们的项目急剧增长,我们一点也没有错过。

    推荐文章