【问题标题】:How to delete asset in nested_form through carrierwave?如何通过carrierwave删除nested_form中的资产?
【发布时间】:2012-03-31 09:34:21
【问题描述】:

美好的一天。 有人在 Carrierwave 中以嵌套形式删除资产的解决方案吗?

型号

has_many :article_images, :dependent => :destroy    
accepts_nested_attributes_for :article_images

mount_uploader :image, ImageUploader    
belongs_to :article, :polymorphic => true

schema.rb

create_table "article_images", :force => true do |t|
t.string "image"
t.string "article_id"
end

create_table "articles", :force => true do |t|
t.string "title"
end

控制器

def edit
@article = Article.find(params[:id])
@article.article_images.build
end

查看

_form.html.erb
<%= f.fields_for :article_images do |article_image| %>
<% if article_image.object.new_record? %>
<%= article_image.file_field :image %>
<% else %>
<%= image_tag(article_image.object.image.url(:thumb)) %>
<%= article_image.check_box :remove_image %> #DON'T WORK
<% end %>
<% end %>

【问题讨论】:

标签: ruby-on-rails nested-forms carrierwave nested-attributes


【解决方案1】:

我认为如果你这样做会更好:

class ArticleImage < ActiveRecord::Base
  # ...
  attr_accessible :remove_image
  after_save :clean_remove_image

  def changed?
    !!(super || remove_image)
  end

  def clean_remove_image
    self.remove_image = nil
  end
end

它对我有用。

【讨论】:

  • 我实际上遇到了与旧版本的 Mongoid 类似的问题。只是 changed? 方法覆盖对我有用。看起来嵌套对象没有被标记为脏,除非模型中的另一个字段在尝试删除图像时也同时更新。
【解决方案2】:

如果您将其添加到模型中的 accept_nested_attributes_for 会发生什么:

accepts_nested_attributes_for :article_images, :allow_destroy => true

并在您的视图代码中进行更改:

<%= article_image.check_box :remove_image %> #DON'T WORK

到这里:

<%= article_image.check_box :_destroy %> #MIGHT WORK?

【讨论】:

  • 爱你 adam :) 使用 nested_for _destroy 破坏对象 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
相关资源
最近更新 更多