gpt4 book ai didi

ruby-on-rails - STI 与 rails 中的多态关联

转载 作者:行者123 更新时间:2023-12-04 18:01:26 25 4
gpt4 key购买 nike

我有一个名为 Slider 的模型

class Slider < ActiveRecord::Base

end

和与slider有单表继承关系的HomeBannerSlider

class HomeBannerSlider < Slider

has_many :images, as: :imageable
accepts_nested_attributes_for :images, reject_if: :all_blank, allow_destroy: true

end

Image 给定的模型

class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
has_attached_file :image
end

我的问题是每当我使用以下命令保存 HomeBannerSlider

      @admin_home_banner_slider = HomeBannerSlider.new(admin_home_banner_slider_params)

@admin_home_banner_slider.save

它将Image模型中的imageable_type保存为Slider

@admin_home_banner_slider.images
<Image:0x007f5e6ef7af20
id: nil,
imageable_id: nil,
imageable_type: "Slider",
title: "2",
description: "2",
link_button: nil,
link_button_title: nil,
owner: nil,
publish: nil,
priority: nil,
created_at: nil,
updated_at: nil,
image_file_name: nil,
image_content_type: nil,
image_file_size: nil,
image_updated_at: nil>]

但我希望它将 imageable_type 存储为 HomeBannerSlider

最佳答案

来自 activerecord 文档 - http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Polymorphic+Associations - “将多态关联与单表继承 (STI) 结合使用有点棘手。为了使关联按预期工作,请确保将 STI 模型的基础模型存储在多态关联的类型列中”。

因此 rails 特别希望将基本类型存储在那里,如果您访问 my_image.imageable 它仍会加载正确的类型,因为它在创建该对象时使用 Slider 表中的类型并且 id 对于整个 Slider 表是唯一的,而不是仅在表中的每种类型中。

综上所述,有一个 gem 可以将您想要的行为添加到 rails - https://github.com/appfolio/store_base_sti_class

关于ruby-on-rails - STI 与 rails 中的多态关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34824218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com