Ruby on rails Rails嵌套表单:更新创建多个记录
我有菜单模型和照片模型,其中菜单与照片有很多关系。对于图片上传,我用的是回形针。我能够构建一个嵌套的表单,在照片表中创建照片和其他属性。但是,当我更新时,照片表中的记录会重复,更新表单中选择的新照片将不会上载。谢谢你的帮助 菜单模型Ruby on rails Rails嵌套表单:更新创建多个记录,ruby-on-rails,ruby-on-rails-4,paperclip,nested-forms,Ruby On Rails,Ruby On Rails 4,Paperclip,Nested Forms,我有菜单模型和照片模型,其中菜单与照片有很多关系。对于图片上传,我用的是回形针。我能够构建一个嵌套的表单,在照片表中创建照片和其他属性。但是,当我更新时,照片表中的记录会重复,更新表单中选择的新照片将不会上载。谢谢你的帮助 菜单模型 class Menu < ActiveRecord::Base has_many :photos, :dependent => :destroy accepts_nested_attributes_for :photos, reject_if:
class Menu < ActiveRecord::Base
has_many :photos, :dependent => :destroy
accepts_nested_attributes_for :photos, reject_if: :all_blank, allow_destroy: true
end
_photo_field.html.haml
= simple_form_for @menu do |f|
= f.simple_fields_for :photos do |photo|
= render 'photo_fields', f: photo
.nested-fields
= f.file_field :image
= f.input :main_flag, as: :hidden, input_html: { value: "true" }
= f.input :user_id, as: :hidden, input_html: { value: "1"}
菜单\u controller.rb
class MenusController < ApplicationController
...
def update
@menu = Menu.find(params[:id])
if @menu.update(menu_params)
if params[:image]
@menu.photos.destroy
@menu.photos.build(menu_params)
end
flash[:success]= 'Menu was successfully updated'
redirect_to brand_menus_path(@menu.brand_id)
else
render 'index'
end
end
private
def menu_params
params.require(:menu).permit(:name, :price, :brand_id, :category_id, :description,
photos_attributes: [:user_id, :image, :main_flag])
end
class MenusController
当与嵌套参数一起使用时,这是强参数的常见问题白名单照片属性
中的:id
应该可以解决您的问题
def menu_params
params.require(:menu).permit(:name, :price, :brand_id, :category_id, :description,
photos_attributes: [ :id, :user_id, :image, :main_flag])
end
当我打开这个问题时,我第一次注意到-@menu.photos.destroy
,我必须说这不仅不起作用,还会引发异常。谢谢!我删除了代码,效果很好。
def menu_params
params.require(:menu).permit(:name, :price, :brand_id, :category_id, :description,
photos_attributes: [ :id, :user_id, :image, :main_flag])
end