如何在多个Ruby模型实例中引用同一个Carrierwave上载的文件而无需重新处理

如何在多个Ruby模型实例中引用同一个Carrierwave上载的文件而无需重新处理,ruby,carrierwave,Ruby,Carrierwave,我有一个模型,它使用Carrierwave作为上传器将文件上传到fog存储 问题是,当我创建100个模型对象时,它们都上传相同的文件 我需要模型实例引用相同的上传文件。一对多关系,其中有多个模型实例和一个文件 目前,该文件是mymodelmessages.rb上名为attachment的属性- class Message < ActiveRecord::Base attr_accessible :body, :remote_attachment_url, :from, :to, :s

我有一个模型,它使用Carrierwave作为上传器将文件上传到fog存储

问题是,当我创建100个模型对象时,它们都上传相同的文件

我需要模型实例引用相同的上传文件。一对多关系,其中有多个模型实例和一个文件

目前,该文件是mymodelmessages.rb上名为attachment的属性-

 class Message < ActiveRecord::Base
  attr_accessible :body, :remote_attachment_url, :from, :to, :status, :attachment, :campaign, :version, :user_id, :SmsId, :response, :response_code, :client_id
  mount_uploader :attachment, AttachmentUploader
 end
我正在使用Ruby 2.0和Rails 4


解决方案: 我将附件文件推到一个新模型中,然后在消息对象和附件对象之间建立关联,从而解决了这个问题

消息控制器:

@attachment = Attachment.create(params[:message][:attachment_attributes])
recipients.each do |value|   
  @message = Message.new(:campaign => params[:message][:campaign], :version => params[:message][:version], :to => value, :body => params[:message][:body], :status => status, :user_id => current_user.id, :client_id => client.id )
  @message.attachment = @attachment
end
 attr_accessible  :attachment_id, :attachment_attributes 
 belongs_to :attachment
 accepts_nested_attributes_for :attachment
attr_accessible :attached, :remote_attached_url, :attachment_attributes
mount_uploader :attached, AttachmentUploader
消息模型:

@attachment = Attachment.create(params[:message][:attachment_attributes])
recipients.each do |value|   
  @message = Message.new(:campaign => params[:message][:campaign], :version => params[:message][:version], :to => value, :body => params[:message][:body], :status => status, :user_id => current_user.id, :client_id => client.id )
  @message.attachment = @attachment
end
 attr_accessible  :attachment_id, :attachment_attributes 
 belongs_to :attachment
 accepts_nested_attributes_for :attachment
attr_accessible :attached, :remote_attached_url, :attachment_attributes
mount_uploader :attached, AttachmentUploader
附件型号:

@attachment = Attachment.create(params[:message][:attachment_attributes])
recipients.each do |value|   
  @message = Message.new(:campaign => params[:message][:campaign], :version => params[:message][:version], :to => value, :body => params[:message][:body], :status => status, :user_id => current_user.id, :client_id => client.id )
  @message.attachment = @attachment
end
 attr_accessible  :attachment_id, :attachment_attributes 
 belongs_to :attachment
 accepts_nested_attributes_for :attachment
attr_accessible :attached, :remote_attached_url, :attachment_attributes
mount_uploader :attached, AttachmentUploader

如果在安装carrierwave上传器的模型中,您有一个属性:

mount_uploader :attachment, YourUploader
因此,假设创建了新对象,您应该能够如下分配图像:

newObj.attachment = anotherObj.attachment
newObj.save

让我知道这是否有效

我用这种方法会有奇怪的行为。我已经尝试使用所描述的方法创建了两个模型。在我的远程文件存储中创建了2个文件。一个是20MB,另一个是24b。两者都不可用。您必须使用单独的上传表将数据库建模为,然后使用
accepts\u nested\u attributes\u for