【问题标题】:Duplicating a record with a Paperclip attachment使用回形针附件复制记录
【发布时间】:2014-06-22 02:13:43
【问题描述】:

我正在创建一个复制项目的操作,然后允许用户对其进行编辑并将其保存回数据库。

我在我的控制器中编写了以下方法,它主要与回形针附件不同,因为某些原因不会移动。

def duplicate
  existing_event = Event.find(params[:id])
  @event = Event.new(existing_event.attributes)

  render action: 'new'
end

我已经看到this question 这个人正在使用.dup,但在用户在保存之前编辑新项目的情况下,我似乎无法正常工作。

我也尝试过使用 @event.image = existing_event.image 之类的东西,但这也没有任何效果。

这就是我的创建方法的样子:

def create
  @event = Event.create(event_params)

  if @event.save
    redirect_to events_path, notice: "Event was successfully created."
  else
    render action: 'new'
  end
end

如果有什么不同的话,我也会使用 S3 来上传图片,如果上面有多个图片副本对我来说并不重要。

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 为什么不@event = Event.find(params[:id]); render 'new' 这应该用所有数据呈现new.html.erb,然后在保存时创建一个新记录。鉴于您没有验证唯一性,因为您正在尝试复制,这似乎势在必行。

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 paperclip


【解决方案1】:

传递附件参数就是这样:传递参数。
您需要传递文件本身
下面您会了解如何做,而不是对其进行测试,但您可以围绕它进行操作并使其工作,这应该不难。

开启new 操作:

existing_event = Event.find(params[:id])
@event = Event.new(existing_event.attributes)

@event.image = File.open(existing_event.image.path,'rb')

render :action => 'new'

还有:
检查您的create 操作,您有一个小错误,调用createsave 以获得相同的记录 - 这是多余的。您应该拨打@event=Event.new(event_params),然后拨打if @event.save

【讨论】:

    【解决方案2】:

    这是我在初始化程序中使用的一个小 sn-p:

    module Paperclip
      class HasAttachedFile
        def define_with_extensions
          define_without_extensions
          define_dup_override
        end
    
        alias_method_chain :define, :extensions
    
        private
    
        def define_dup_override
          name = @name
          @klass.send :define_method, "dup" do
            copy = super()
            self.class.attachment_definitions.each do |name, options|
              ivar = "@attachment_#{name}"
              copy.instance_variable_set(ivar, nil)
    
              copy.send(name).assign send(name)
            end
    
            copy
          end
        end
      end
    end
    

    这将以编程方式将旧记录中的文件分配给新记录,而无需知道实际的附件定义是什么。

    【讨论】:

    • 我发现这很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多