我想知道是否可以在父控制器中创建嵌套模型的实例。
让我解释一下。我有一个名为博物馆的模型和另一个名为Museumimage的模型。 Museumimage只有一个字段是附件,由 Paperclip gem管理。我为此创建了一个单独的模型,因为可以根据需要链接到博物馆模型。我认为这比创建博物馆模型的20个附件字段更好......大多数都是空的..
然后在新视图中,我有一个表单,允许同时添加博物馆实例和某些文件字段的信息。
以下是我的观点:
<%= form_for :museum, url: museums_path do |f| %>
<p>
<%= f.label :name %><br>
<%= f.text_field :name %> </p>
....
<%= f.file_field :image %><br>
(有些参数如:名称属于博物馆模型,而且:图像为第二个嵌套模型Museumimage)
我做了一个非常简单的控制器,CREATE重要位是:
@museum = Museum.new(museum_params)
@museum.save
@image = @museum.museumimages.create(image_params)
redirect_to @museum
(目前为一张图片)
虽然我收到错误: ActionController :: MuseumsController中的ParameterMissing #create
这是我第一次尝试Paperclip。
我的问题:
编辑 编辑 编辑
我找到了一个表单助手FIELDS_FOR的解决方案的开头。
<%= f.fields_for :museumimages do |museumimages_fields| %>
Image: <%= museumimages_fields.file_field :image %>
<% end %>
但我仍然收到错误消息 param缺失或值为空:museumimages
app/controllers/museums_controller.rb:191:in `image_params'
app/controllers/museums_controller.rb:129:in `create'
"museumimages"=>{"image"=>#<ActionDispatch::Http::UploadedFile:0x475bca8@tempfile=#<Tempfile:C:/Users/Maxence/AppData/Local/Temp/RackMultipart20160118-8768-obyvra.JPG>,
@original_filename="DSC07825.JPG",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"museum[museumimages][image]\"; filename=\"DSC07825.JPG\"\r\nContent-Type: image/jpeg\r\n">}},
我认为我的控制器位不正确。
Def Create
...
@image = @museum.museumimages.new(image_params)
@image.save
end
def image_params
params.require(:museumimages).permit(:image)
end
答案 0 :(得分:0)
您需要查看accept nested attributes method,这样模型将允许保存实例,然后在方法getChoices()
中,您需要以数组形式添加额外的参数,本案例params.require(:museum).permit(:name,museumimages:[:image])
这应该可以解决问题