将Paperclip图像复制到Rails 4中的新记录

时间:2015-01-07 01:57:41

标签: ruby-on-rails-4 paperclip

我的网站用于发布专辑评论,称为Pins。引脚模型具有以下属性:

:artist,:year,:title,:rank,:description,和:image

图像使用Paperclip,如果重要,则存储在Amazon S3上

我正在尝试允许用户查看其他用户发布的评论,然后点击链接以更简单地为同一专辑撰写自己的评论。所以基本上链接将它们带到Pin.new页面,表格已经有:artist,:title,:image和:year ready in。

我想出了如何在带来所有属性的同时做到这一点,包括:description和:rank,这是我不想要的。我也能够将图像带到新表单。

这是使用的<_p>中的pins_controller.rb代码

  def copy
    @source = Pin.find(params[:id])
    @pin = @source.dup
    render 'new'
  end

在我的节目视图中:

<%= link_to "copy", copy_pin_path(params[:id]) %> 

所以问题是如何只对@ source.dup:artist,:title和:year

问题二是如何带回回形针图像。我尝试将其添加到我的pins_controller.rb:

  def copy
    @source = Pin.find(params[:id])
    @pin = @source.dup
    @pin.image = @source.image
    render 'new'
  end

但这没有用。

更新:miller350回答了我的第一个问题,但我仍然无法将回形针图像复制到&#34; new&#34;形成。在控制台中,我可以从一个Pin记录中复制并保存一个新的引脚,如下所示:

r = Pin.new
r.image = Pin.find(83).image
r.save

我认为问题在于新的引脚形式要求在保存引脚之前从用户的PC中选择图像。无论Paperclip的功能是什么,我认为这就是我被卡住的地方。

2 个答案:

答案 0 :(得分:2)

对于第一部分,您可以单独提取属性并将它们设置为实例变量,对于第二部分,您可以使用URI。

def copy
  @source = Pin.find(params[:id])
  @image = URI.parse(@source.image)
  @pin = Pin.new(artist: @source.artist, title: @source.title, year: @source.year, image: @image)
  render 'new'
end

答案 1 :(得分:1)

以下是我最终要将图像复制到新的图钉形式。

我已经设置了Paperclip的image_remote_url功能,但是我需要在pin.rb中将.to_s添加到下面的方法中:

def image_remote_url=(url_value)
 self.image = URI.parse(url_value).to_s unless url_value.blank?
 super
end

然后我的控制器:

def copy
 @source = Pin.find(params[:id])
 @image = @source.image.url
 @pin = Pin.new(artist: @source.artist, album: @source.album, year: @source.year, image_remote_url: @image)
 render 'new'
end

这会将图像的网址粘贴到新表单中。它只适用于我的Heroku生产版本,而不适用于本地版本。