如何在多个Ruby模型实例中引用相同的Carrierwave上载文件而不进行重新处理

时间:2013-08-16 01:10:18

标签: ruby carrierwave

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

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

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

目前,该文件是我的模型messages.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

MessagesController.rb 中创建新的Message实例时,我在控制器中设置了附件 -

 recipients.each do |value|
   @message = Message.new(:attachment => params[:message][:attachment], :campaign => message[:campaign], :version => message[:version], :to => value, :body => body, :status => status, :user_id => current_user.id, :client_id => client.id )
 end 

我正在使用Ruby 2.0,Rails 4


解决方案:

我通过将附件文件推送到新模型然后在消息对象和附件对象之间建立关联来解决此问题。

MessagesController:

@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

1 个答案:

答案 0 :(得分:0)

如果您的模型中安装了载波上传器,则您拥有一个属性:

mount_uploader :attachment, YourUploader

因此,假设您的新对象已创建,您应该可以像这样分配图像:

newObj.attachment = anotherObj.attachment
newObj.save

如果有效,请告诉我。