Rails具有内部模式,它为这些模式生成表来处理多态关联
has_one_attached :document
has_many_attached :pictures
has_rich_text :body
然而,这种多态性很难与mobility
gem提供的多态性争论,其中一个将声明:
translates :caption, type: :string
translates :description, type: :text
首先,在迁移中有一个意想不到的行为:在为ActiveStorage设置迁移之前向后迁移时,发现表未被删除。迁移+重新启动服务器=对象仍在呈现。只有清洗才能删除它们。
我不知道我错在哪里,没有修改迁移。但是,我注意到,对于Rails 7应用程序,类被声明为class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
也许它工作在向上但不向下.
下面的代码确实创建了可以通过控制台进行查询和更新的列。
class UpdateActiveStorageTables < ActiveRecord::Migration[7.0]
def change
add_column :active_storage_blobs, :caption, :string
add_column :active_storage_blobs, :description, :text
end
end
控制器动作可以更新blob
def add_image
images = params[:individual][:image]
if images
images.each do |image|
@individual.images.attach(image)
end
end
@individual.save
new_image = @individual.images.last # in the hope of no near-simultaneous addition of an image to said user
new_image.blob.update(caption: params[:individual][:caption], description: params[:individual][:description])
end
- 是的,这有点奇怪,但对于表单,添加的属性(标题和描述)不是图像数据数组的一部分 *
是否可以在模型级别为Mobility声明这一点,并将Mobility集成到该操作中(如果可以,如何实现)?
另一种方法是创建一个新的类,多态性假设多个类使用ActiveStorage,以创建属于附件的属性,将这些属性转换为附件创建的后续数据输入。
但是如何定义迁移和模型(belongs_to ActiveStorage::Attachment
?)创建此类类?
2条答案
按热度按时间p3rjfoxz1#
在我看来,
has_one_attached
总是比has_many_attached
更好,因为你可以在“父”模型中添加任何需要的列,按它们排序,等等。在这种情况下,您可以将这些
caption
或description
用于Picture
模型,而不是用于blobj9per5c42#
@mechnicov的回答被标记为接受和赞成,因为它指向了一个有效的方向。
其他因素也在发挥作用:
1.具有多部分附件组件的表单不能以简单的UI方式处理多个区域设置输入:可能会出现太多错误,导致用户受挫
1.试图围绕ActiveStorage对象的Rails多态性争论移动性是漫长而昂贵的。根据第一点,陪审团可以立即做出裁决。
因此,简单地说:
has_one_attached :file
定义Picture类就行了。
这位观察者认识到Rails的方式是直接和健壮的。