gpt4 book ai didi

ruby-on-rails - rails has_many 经理

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:23 27 4
gpt4 key购买 nike

我正在尝试创建一个多态成像系统,它允许各种对象具有封面图像和附加图像。使用 belongs_to :imageable 创建 Image 模型是否正确?或者,我是否应该分离我的逻辑,以便为每个将继承图像功能的模型提供一个单独的多态关联,用于封面图像和附加图像?

那么,一旦我设置了 has_many 关系,我该如何管理它呢?在一个完美的世界中,我希望能够调用 @object.images.cover?@object.images.additionals

最佳答案

为具有cover bool 字段的多态关联创建一个images 表,指示记录中的图像是否为封面图像:

create_table :images do |t|
t.boolean :cover, :default => false
t.references :imageable, :polymorphic => true
t.timestamps
end

然后在您的对象上包含 has_many :images, :as => :imageable。现在要获得您想要的 @object.cover@object.additionals,您有两个选择。第一个是创建一个 Concern 模块以混入您的 Object 类。二是子类化。我将在这里讨论 Concern 方法,因为它是一种在 Rails 4 中推出的方法,并且大多数程序员已经熟悉子类化。

app/models/concerns 中创建一个模块:

module Imageable
extend ActiveSupport::Concern

included do
has_many :images, :as => :imageable # remove this from your model file
end

def cover
images.where(:cover => true).first
end

def additionals
images.where(:cover => false).all
end
end

您现在可以将此问题混入您的对象类中。例如:

class Object1 < ActiveRecord::Base
include Imageable

...
end

您还必须包括您对 app/models/concerns 的关注,因为它们不会自动加载(在 Rails 4 中,默认情况下会包括该目录中的任何文件)。

关于ruby-on-rails - rails has_many 经理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541248/

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