开发者

allow_destroy in a form_for helper - Ruby on Rails

Can I use the 'magic' _d开发者_JAVA技巧estroy attribute that works for accepts_nested_attributes_for for a regular form_for helper?

I have a file that I'm uploading via Paperclip and I'd like to have the option to delete it.


Yes indeed - here's a contrived example in Haml.

- form_for @obj, :url => obj_path, :method => :put do |f|
  - f.fields_for :sub, f.object.sub do |sub_form|
    - unless sub_form.object.new_record?
      %span.label= sub_form.label '_delete', 'Remove File'
      %span.input= sub_form.check_box '_delete'

And in the model:

accepts_nested_attributes_for :sub, :allow_destroy => true

EDIT - NEW ANSWER: Yes, you can, but it's less "magical". You need to define your own virtual attribute on the model to be checked prior to the save. Here's an (untested) example that does not use nested attributes:

- form_for @obj do |f|
  - unless f.object.new_record?
    %span.label= f.label 'delete_file', 'Remove File'
    %span.input= f.check_box 'delete_file'

And in the model:

  attr_accessor :delete_file  # this is the "virtual attribute" that gets set by the checkbox
  before_update :remove_file
  def remove_file
    self.file = nil if self.delete_file == '1'
  end

See Railscasts #167 for a more detailed explanation of virtual attributes.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜