Ruby on Rails,将Image从一个对象传递到另一个对象或从NEW传递给CREATE

时间:2012-04-07 15:05:56

标签: ruby-on-rails ruby ruby-on-rails-3 carrierwave

我是Ruby on Rails的新手。

我改变了这个帖子,因为我认识到我在错误的一端搜索我的问题解决方案。

这是我的问题:

我有一个Class ProfileProposal ,我上传了一张图片(使用CarrierWave)。 现在我想将 ProfileProposal 转换为另一个名为个人资料的类。 所以我将所有信息传递给个人资料的新形式。

适用于字符串,但不适用于图像。

我已尝试/完成的事情:

将图像作为GET参数传递给创建方法:

<%= form_for @profile, :url => { :action => "create", :controller => "profiles", :image => @profile_proposal.image } do |f| %>

#

现在有效,所以我有图片网址。

什么不起作用如下:

@profile = Profile.new(params[:profile], :image => new_image_url)
# OR
@profile.image = new_image_url

@ profile.image仍然具有Carrierwave给出的默认值。

提前致谢!

3 个答案:

答案 0 :(得分:0)

我来自使用回形针,而不是载波,所以我会尝试保持这个高水平。但我对你有个想法。也许您可以在新附件存在之前设置它的文件名,然后将图像移动到该路径。使用回形针,这将像:

@profile.image_file_name = "profile.jpg"
# creates the directory of the new path.  There's probably a better way to do this:
FileUtils.mkdir_p @profile.image_file_path.gsub(/[^\/]*$/,'')
FileUtils.mv @profile_proposal.image_path @profile.image_path

答案 1 :(得分:0)

您应该在Profile表单中嵌入隐藏字段,并通过某个ID引用ProfileProposal。然后在处理表单服务器端时,在所有内容都经过验证并准备好保存之后,您应该使用一些读/写方法从ProfileProposal实例到Profile实例复制映像。我不确定CarrierWave是如何要你这样做的。

答案 2 :(得分:0)

我最后通过使用paperclip并通过

创建一个新的实例来解决这个问题
Profile.create(:name => @profile_proposal.name, :image => @profile_proposal.image)