【问题标题】:Rails - activeadmin, duplicating has_many records upon updating "parent" recordRails - activeadmin,在更新“父”记录时复制 has_many 记录
【发布时间】:2014-06-15 22:57:36
【问题描述】:

我的模型如下:

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 张图片。

希望问题很清楚。如果有人能给我一点帮助,将不胜感激。

非常感谢。

【问题讨论】:

    标签: ruby-on-rails ruby activeadmin


    【解决方案1】:

    你必须允许图片的id:project_images_attributes: [:id, :image, :cover]

    如果不允许该id,则在action中为null,rails认为是新记录并保存。

    【讨论】:

    • 我还没来得及测试这个。但这完全有道理。所以你得到了赏金:)
    • 谢谢。 :D 我有同样的问题,这就是解决方案。
    【解决方案2】:

    我认为这与 CarrierWave wiki 上讨论的 this one 相同。不是为现有图像生成输入字段,而是生成图像标签和“删除?”选项。如果您为它们生成一个输入字段,那么您最终会得到重复的结果。

    【讨论】:

    • 我不确定,因为它不会替换文件。它复制了项目实例当前的 project_images 记录数量。
    【解决方案3】:
    ActiveAdmin.register Project do
      controller do
        def apply_filtering(chain)
          super(chain).distinct
        end
      end
    
      # your code
    end
    

    【讨论】:

    • 答案在包含解释时更有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 2013-01-28
    • 2012-03-25
    • 2015-05-06
    • 2018-04-12
    相关资源
    最近更新 更多