Ruby on rails 未定义的方法';可成像的u型&x27;模型

Ruby on rails 未定义的方法';可成像的u型&x27;模型,ruby-on-rails,Ruby On Rails,我想使用多态的Photo模型来处理不同模型的图像。每个imageable_类型都有不同的标准。TypeItem将具有版本控制并是公共的,而TypeUser将具有加密并存储在私有的S3存储桶中。我想我可以这样做: class Photo < ApplicationRecord if imageable_type == "Item" include ImageUploader::Attachment(:image) elsif imageable_type == &

我想使用多态的
Photo
模型来处理不同模型的图像。每个
imageable_类型
都有不同的标准。Type
Item
将具有版本控制并是公共的,而Type
User
将具有加密并存储在私有的S3存储桶中。我想我可以这样做:

class Photo < ApplicationRecord
 if imageable_type == "Item"
  include ImageUploader::Attachment(:image)
 elsif imageable_type == "User"
  #do something else
 end
    
 belongs_to :imageable, polymorphic: true
 validates_presence_of :image
end

class User < ApplicationRecord
 has_many :photos, as: :imageable, dependent: :destroy
end

class Item < ApplicationRecord
 has_many :photos, as: :imageable, dependent: :destroy
end
班级照片
但这样做会产生错误:
NoMethodError(未定义的Photo方法'imageable\u type'(调用'Photo.connection'建立连接):Class)


如何根据多态模型的关联类型对其应用不同的进程?

这不起作用,因为您的代码是在类上定义的,而不是在实例上定义的。当然,该类没有
imageable\u type
属性,只有实例具有该属性

根据您想要做什么,您需要将其移动到类似这样的方法

班级照片
def上传#
如果可成像_类型==“项目”
#做点什么
elsif可成像_类型==“用户”
#做点别的
结束
结束
结束

我们需要更多关于
标准的信息,以便在这里找到一个合适的解决方案。

在我的情况下,我使用Shieline上传图像,并在需要时使用Lockbox进行加密。我在这里得到了一句话:
包括ImageUploader::Attachment(:image)
,它上载到S3并创建版本。但是我想根据可成像类型添加额外的参数(加密并存储在私有S3中),您不能这样做,因为您需要在类级别上这样做,而在类级别上,您只是不知道可成像类型。一种方法是使用
SecurePhoto
对其进行子类化,其中包括带有加密选项的附件。我很可能会在重构中采用您的方法。非常感谢。