allow_destroy в помощнике form_for - Ruby on Rails - PullRequest
1 голос
/ 01 марта 2010

Могу ли я использовать атрибут * magic '_destroy, который работает для accepts_nested_attributes_for для обычного form_for помощника?

У меня есть файл, который я загружаю через Paperclip, и я хотел бы иметь возможность удалить его.

1 Ответ

4 голосов
/ 01 марта 2010

Да, действительно - вот надуманный пример на Хамле.

- 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'

А в модели:

accepts_nested_attributes_for :sub, :allow_destroy => true

РЕДАКТИРОВАТЬ - НОВЫЙ ОТВЕТ: Да, вы можете, но это менее "волшебно". Вам нужно определить свой собственный виртуальный атрибут в модели, которую нужно проверить перед сохранением. Вот (непроверенный) пример того, что не использует вложенные атрибуты:

- 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'

А в модели:

  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

См. Railscasts # 167 для более подробного объяснения виртуальных атрибутов.

...