Басқа модельдің жазбасын жою үшін before_destroy пайдалану керек пе?

Менде моделі бар, оны Notes деп атайық. Ескертулерде бірнеше хабарламалар болады. Мәселен, ноталар үлгісі келесідей:

 has_many :posts

Және посттар моделінде сызық бар

 belongs_to :note

Енді Пайдаланушы пошта жояды, мен жазбаны жоғалтқыңыз келсе, басқа ешқандай хабарламалар болмаса.

Мен бұл кодты post_destroy арқылы жазылған үлгіге жазатынымды ойладым:

 def delete_note_if_last_post
    if self.note.posts.count == 1
      self.note.destroy
    end
  end

Бұл жұмыс істемейді. Серверді «заңсыз нұсқаулар» негізінде жауып тастайды. Мен жасауға тырысатын нәрсені орындаудың бір жолы бар ма?

EDIT: кодты өзгертіп, қатені байқадым, енді мәселе сәл өзгеше.

2

2 жауаптар

pre_destroy сүзгісіндегі модельдің жойылуын болдырмау үшін жалған сөздерді қайтаруға болады

before_destroy :has_no_post

содан кейін has_no_post

def has_no_post
 #You can prevent this from deletion by using these options
 #Option1 return false on certain condition  
return false if posts.any?

#or add an error to errors
errors << "Can not delete note if it has post" if posts.any?
#raise an exception 
raise "Cant delete ..." if blah blah

Соңы

4
қосылды
Иә, рахмет және сіз қателіктерді түзетуіңіз керек !!
қосылды автор Naveed, көзі
Навейд рельстердің орнына «Жоюға болмайды ...» дегенді білдіреді деп ойлаймын.
қосылды автор Shirjeel Alam, көзі
Бұған қоса, сіз посттың жойылуына жол бермейміз ...
қосылды автор Elmatou, көзі

Мен мұндай бақылауды бақылаушыға қоямын. Бір нәрсе

class PostObserver < ActiveRecord::Observer
  def after_destroy(post)
    note = Note.find(post.note_id)
    note.destroy if note.posts.count == 0
  end
end

Байқаушыға config/application.rb файлында тіркелу керек. Айта кету керек, сіздің кері шақыруыңыз жалған деп бағалануы мүмкін кез келген мәнді қайтарса (мысалы, нөл немесе жалған), қалған кері байланыстарыңыз іске қосылмайды.

1
қосылды
Сонымен қатар, нақты қате пайдалы болар еді. Мүмкін, сіздің кодыңыз жұмыс істеп тұруы мүмкін, бірақ «Заңсыз нұсқаулар» қатесін тудырады.
қосылды автор dogenpunk, көзі