我的模型如下:
class Project < ActiveRecord::Base
has_many :project_images
accepts_nested_attributes_for :project_images
end
class ProjectImage < ActiveRecord::Base
belongs_to :project
mount_uploader :image, ImageUploader
end
这里是activeadmin文件:
ActiveAdmin.register Project do
remove_filter :projects_sectors
permit_params :title, :info, :case_study, project_images_attributes: [:image, :cover]
index do
column :title
actions
end
form :html => { :enctype => "multipart/form-data" } do |f|
f.inputs "Project" do
f.input :title
f.input :info
f.input :case_study, :as => :file
end
f.inputs "Images" do
f.has_many :project_images, :allow_destroy => true, :heading => false, :new_record => true do |img_f|
img_f.input :image, :as => :file , :hint => f.template.image_tag(img_f.object.image)
img_f.input :cover
end
end
f.actions
end
end
问题在于,当我简单地编辑项目并单击更新项目时,它只是复制了该点上存在的关系的所有记录。例如。如果我在1个项目下有2个图像,在更改说,项目标题后,我将最终得到4个图像。
希望明白问题是什么。如果有人能给我一点帮助,我将非常感激。
提前多多感谢。
答案 0 :(得分:13)
您必须允许图片的ID:project_images_attributes: [:id, :image, :cover]
如果您不允许该ID,则该操作将为空,并且rails认为它是新记录并保存。
答案 1 :(得分:0)
我认为这与CarrierWave wiki上讨论的this one问题相同。生成图像标签并删除?&#39;选项。如果为它们生成输入字段,那么您最终会得到重复的结果。
答案 2 :(得分:-1)
ActiveAdmin.register Project do
controller do
def apply_filtering(chain)
super(chain).distinct
end
end
# your code
end