Rails - activeadmin,在更新时复制has_many记录" parent"记录

时间:2014-06-15 22:57:37

标签: ruby-on-rails ruby activeadmin

我的模型如下:

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个图像。

希望明白问题是什么。如果有人能给我一点帮助,我将非常感激。

提前多多感谢。

3 个答案:

答案 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