Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 4 将回形针图像复制到Rails 4中的新记录_Ruby On Rails 4_Paperclip - Fatal编程技术网

Ruby on rails 4 将回形针图像复制到Rails 4中的新记录

Ruby on rails 4 将回形针图像复制到Rails 4中的新记录,ruby-on-rails-4,paperclip,Ruby On Rails 4,Paperclip,我的网站是用来发布专辑评论的,这些评论被称为pin。管脚模型具有以下属性: :艺术家,:年份,:头衔,:等级,:描述和:图像 该图像使用回形针,如果有必要,则存储在Amazon S3上 我试图让一个用户看到另一个用户发布的评论,然后单击一个链接,更简单地为同一张相册编写他们自己的评论。因此,基本上链接会将他们带到Pin.new页面,表单中已经填写了:artist、:title、:image和:year 我找到了如何做到这一点,同时带来了所有属性,包括:description和:rank,这是我不

我的网站是用来发布专辑评论的,这些评论被称为pin。管脚模型具有以下属性:

:艺术家,:年份,:头衔,:等级,:描述和:图像

该图像使用回形针,如果有必要,则存储在Amazon S3上

我试图让一个用户看到另一个用户发布的评论,然后单击一个链接,更简单地为同一张相册编写他们自己的评论。因此,基本上链接会将他们带到Pin.new页面,表单中已经填写了:artist、:title、:image和:year

我找到了如何做到这一点,同时带来了所有属性,包括:description和:rank,这是我不想要的。我也无法将图像转换为新形式

以下是我正在使用的pins_controller.rb代码:

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

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

更新:miller350回答了我的第一个问题,但我仍然无法将回形针图像复制到“新”表格中。在控制台中,我可以复制一个Pin记录并保存一个新Pin,如下所示:

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

我认为问题在于,新的pin表单要求在保存pin之前从用户的PC上选择图像。无论回形针的功能是什么,我想这就是我遇到的问题。

对于第一部分,您可以单独提取属性并将其设置为实例变量,对于第二部分,您可以使用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

下面是我最后将图像复制到新pin表单的步骤

我已经设置了回形针的image\u remote\u url功能,但我需要在pin.rb中的以下方法中添加

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

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

第一部分做得很好,谢谢!第2部分给出了一个错误“坏URI(不是URI?):/system/pins/images/000/000/083/…”,在谷歌搜索之后,我发现了一个建议,将上面的内容更改为@image=URI.parse(URI.encode(@source.image))然后它给了我一个错误:将
@source.image
更改为
@source.image.url
的未定义方法“gsub”,并查看它是否返回字符串而不是附件。当我添加时,我在@pin行上得到一个错误,该错误表示“没有将URI::Generic隐式转换为字符串”因为你回答了我的第一个问题,所以我把答案投了高票。我想出了第二部分的解决办法。我将把它作为第二个答案发布。
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