ruby-on-rails-5 - 使用 STI 时,Rails 5.0 不获取多态关联

标签 ruby-on-rails-5 polymorphic-associations sti

gem 'rails', '4.2.7.1'

class Property < Accommodation  
   has_many :attachments, as: :attached_item, dependent: :destroy  
end

class Accommodation < ActiveRecord::Base;
end

class Attachment < ActiveRecord::Base
     belongs_to :attached_item, polymorphic: true
end

该关联在 Rails 4.2 中工作得很好

Property.last.attachments
 Property Load (0.9ms)  SELECT  "accommodations".* FROM "accommodations" WHERE "accommodations"."type" IN ('Property')  ORDER BY "accommodations"."id" DESC LIMIT 1
 Attachment Load (0.5ms)  SELECT "attachments".* FROM "attachments" WHERE "attachments"."attached_item_id" = $1 AND "attachments"."attached_item_type" = $2  [["attached_item_id", 1], ["attached_item_type", "Property"]]

Rails 5.0 中的类似关联

class CustomInquiry < ApplicationRecord;
end

class ChildInquiry < CustomInquiry  
     has_many :text_histories, as: :mailed_item, dependent: :delete_all
end

class TextHistory < ApplicationRecord
    belongs_to :mailed_item, polymorphic: true
end

2.4.0 :002 > ChildInquiry.last.text_histories
 ChildInquiry Load (1.2ms)  SELECT  "custom_inquiries".* FROM "custom_inquiries" WHERE "custom_inquiries"."type" IN ('ChildInquiry') ORDER BY "custom_inquiries"."id" DESC LIMIT $1  [["LIMIT", 1]]
 TextHistory Load (0.4ms)  SELECT "text_histories".* FROM "text_histories" WHERE "text_histories"."mailed_item_id" = $1 AND "text_histories"."mailed_item_type" = $2  [["mailed_item_id", 197], ["mailed_item_type", "CustomInquiry"]]

但是这里第二个查询应该像这样运行:

 TextHistory Load (0.4ms)  SELECT "text_histories".* FROM "text_histories" WHERE "text_histories"."mailed_item_id" = $1 AND "text_histories"."mailed_item_type" = $2  [["mailed_item_id", 197], ["mailed_item_type", "ChildInquiry"]]

任何人都可以帮助我了解 Rails 5 中的更新内容以及覆盖它的猴子补丁吗?

最佳答案

最新版本的 ActiveRecord 在关联中使用基类,因此当我们使用 STI 时,它会采用基类而不是当前类。 因此,为了解决这个问题,您可以使用 Gem gem "store_base_sti_class"
它将使用ActiveRecord关联中的当前类。
这是github链接

https://github.com/appfolio/store_base_sti_class

关于ruby-on-rails-5 - 使用 STI 时,Rails 5.0 不获取多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52380283/

相关文章:

ruby-on-rails - 配置 nginx 以代理 thin 和 Rails ActionCable

Laravel hasMany通过多态关系

mysql - 可以对两个可能的表之一执行MySQL外键吗?

ruby - 使用 Devise 的 Rails 5,使用 Rspec 测试 Controller (销毁操作)

ruby-on-rails - Puma 开发中的 Rails 5.1 ActiveJob 未执行特定的排队作业

css - 如何从Rails的application.scss加载中排除.css文件?

ruby-on-rails - 如何优雅地为具有多态关联的模型构建表单?

ruby-on-rails - 如何使用 STI 建立 ActiveRecord 关联

ruby - Rails 4 - STI has_many :through with polymorphic association