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