我有这样的模特:
class Doc
has_many :photos
end
和
class Photo
belongs_to :doc
end
使用CarrierWave-Paperclip方式将所有照片上传到云端。
DocController #new prebuilds Doc with:
@doc = Doc.new
只有在保存这个新文档后,在更新操作中我才能真正将照片上传到现有的Doc对象:
@doc.photos << some_new_photo
但我想在doc#new action中使用此功能。那么,我如何上传像prebuilded Photo对象的照片,并将它们添加到prebuilded Doc with @ doc.photos&lt;&lt; [照片]同时?
UPD:
主要问题,当我制作doc#new时 - 我真的不知道在使用表单时我会上传多少张照片。因此,如果关联的Doc未保存/
,我已动态构建了不应保存到数据库的照片数组答案 0 :(得分:1)
您可以使用一个名为accepts_nested_attributes的有点复杂的Rails功能,它允许您一次创建任意数量的关联对象。
基本上你的创建调用最终会接受这样的内容:
{ :doc => { :name => 'somname', :date => Time.now, :photos_attributes => [
{ :filename => 'funnybear.gif', :filesize => '120kb' },
{ :filename => 'happybear.gif', :filesize => '72kb' },
{ :filename => 'angrybear.gif', :filesize => '240kb' }
]}}
答案 1 :(得分:0)
您可以使用块
@doc = Doc.new do |doc|
doc.photos << some_new_photo
end
或者您可以重新定义初始化方法
class Doc
def initialize
@photos << some_new_photos
end
end
答案 2 :(得分:0)
或者你可以使用build:
@doc = Doc.new
params[:photos].each do |some_new_photo|
@doc.photos.build some_new_photo
end
if @doc.save!
... etc