удалить вложение скрепки, если оно не является последним - PullRequest
1 голос
/ 20 января 2011

У меня есть приложение rails со следующим кодом:

class Rig < ActiveRecord::Base
  has_many :rig_pictures, :dependent => :destroy

  accepts_nested_attributes_for :rig_pictures, 
                                :allow_destroy => true,
                                #we reject blank pictures unless they have to be deleted
                                :reject_if => lambda { |a| a['picture'].blank? && !a['_destroy'] }

  validate :has_beween_1_and_x_pictures
private

  def has_beween_1_and_x_pictures
    errors.add_to_base("must not have more than 8 pictures") if rig_pictures.size > 8
    errors.add_to_base("must have at least 1 picture") if rig_pictures.size < 1
  end
end

Моя проблема заключается в проверке "должно быть хотя бы 1 изображение". Если пользователь находится в форме редактирования и удаляет все его изображения, проверка не будет неудачной, поскольку в этот момент он не знает, что я хочу удалить.

Итак, мой вопрос: как я могу убедиться, что валидация учитывает только реальные изображения, а не те, которые я хочу удалить?

Thx.

1 Ответ

1 голос
/ 20 января 2011

Может быть, вы можете попробовать проверку в модели RidPicture.

Что-то похожее на

def before_destroy
    if ( self.rid.rid_pictures.count <= 1)
      errors.add_to_base  "Almost one image"
      false
    end 
end

не проверено

...