ruby-on-rails Rails的ActiveStorage和Rails Text国际化

insrf1ej  于 2023-10-21  发布在  Ruby
关注(0)|答案(2)|浏览(120)

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?)创建此类类?

p3rjfoxz

p3rjfoxz1#

在我看来,has_one_attached总是比has_many_attached更好,因为你可以在“父”模型中添加任何需要的列,按它们排序,等等。

class Picture < ApplicationRecord
  extend Mobility

  belongs_to :imageable, polymorphic: true

  has_one_attached  :file

  translates :caption, type: :string
  translates :description, type: :text
end

class User < ApplicationRecord
  has_many :pictures, as: :imageable
end

在这种情况下,您可以将这些captiondescription用于Picture模型,而不是用于blob

j9per5c4

j9per5c42#

@mechnicov的回答被标记为接受和赞成,因为它指向了一个有效的方向。
其他因素也在发挥作用:
1.具有多部分附件组件的表单不能以简单的UI方式处理多个区域设置输入:可能会出现太多错误,导致用户受挫
1.试图围绕ActiveStorage对象的Rails多态性争论移动性是漫长而昂贵的。根据第一点,陪审团可以立即做出裁决。
因此,简单地说:

  • 为Picture类添加可本地化(和/或可索引)列,
  • 使用has_one_attached :file定义Picture类
  • 执行Rails的ActiveStorage所规定的所有内容

就行了。
这位观察者认识到Rails的方式是直接和健壮的。

相关问题