Beberapa lampiran penjepit kertas disimpan tanpa menentukan input file

Saya memiliki model Pengguna yang memiliki asosiasi has_many model Aset (pengaturan penjepit kertas standar). Dalam tampilan, saya menggunakan bantuan field_for untuk menyiapkan sejumlah bidang file untuk aset. Jika pengguna akhir tidak menentukan file, catatan aset tidak akan disimpan. Itu yang saya inginkan. Sejauh ini bagus.

Lalu saya menambahkan atribut caption ke model Aset. Saya juga meletakkan kolom teks ke setiap kolom file yang sesuai. Inilah masalahnya. Ketika pengguna akhir tidak menentukan file atau keterangan, catatan aset akan DISIMPAN. Catatan yang disimpan memiliki keterangan string kosong, dengan semua atribut penjepit kertas lainnya nihil.

Pertanyaannya adalah bagaimana saya bisa mencegah catatan aset disimpan ketika tidak ada file yang ditetapkan ke atribut penjepit kertas? Dan karena aset bersifat opsional, saya tidak ingin ada umpan balik kesalahan yang dihasilkan. Ada ide? Terima kasih.


person Ziyu    schedule 26.08.2012    source sumber


Jawaban (1)


Anda dapat melakukan validates_presence_of :caption pada model Aset Anda, namun hal ini juga memerlukan teks. Bagaimana dengan memeriksa keberadaan file di semua aset yang ditautkan ke Pengguna before_validation? Sesuatu seperti ini mungkin? (mungkin perlu beberapa penyesuaian)

class User < AR::Base
  has_many :assets, :dependent => :destroy

  before_validation :check_assets

  def check_assets
    self.assets.each do |asset|
      unless asset.attachment.file?
        if asset.new_record?
          self.assets.delete(asset)
        else
          asset.destroy
        end
      end
    end
  end
end
person Peter Duijnstee    schedule 26.08.2012
comment
Ide yang hebat! Itu akan melakukan apa yang saya inginkan! Terima kasih banyak! Salah satu penyesuaiannya adalah mengulangi salinan aset sehingga assets.delete(asset) berperilaku baik. - person Ziyu; 27.08.2012