On Sep 5, 3:07 pm, brianp <brian.o.pea...@gmail.com> wrote: > Hey, > I was just wondering what the best practice for this situation would > be. I've got two models(word, definition) both with destroy methods in > the controllers that just change the model.status to "deleted". In the > words controller I'd like it to call the definition_controller destroy > method on definition models. And I'm just blanking on how to do this > like a regular model method. Would I have to double the destory method > in the model? Then I wouldn't be adhering to dry. > > // words_controller.rb > def destroy > begin > ActiveRecord::Base.transaction do > @word = Word.find(params[:id], :include => :definitions) > @word.status = 'deleted' > @word.save > > @word.definitions.each do |h| > h.destroy // Actually destorys the record instead of just > setting the status to "deleted" > end > end > rescue ActiveRecord::RecordInvalid => invalid > flash[:notice] = 'Word was not deleted' > render :action => "new" > end > > respond_to do |format| > format.html { redirect_to(words_url) } > end > end > > // definitions_controller.rb > def destroy > begin > ActiveRecord::Base.transaction do > @definition = Definition.find(params[:id]) > @definition.status = 'deleted' > @definition.save > end > rescue ActiveRecord::RecordInvalid => invalid > flash[:notice] = 'Definition was not deleted' > render :controller => :words, :action => "new" > end > > respond_to do |format| > format.html { redirect_to(words_url) } > end > end > > Thanks, > bp
I'm not sure how creating a method that sets the status attribute to "deleted" and saves the record would conflict with DRY principles? Also, it seems that the specifics of this what-would-be "mark_deleted" or maybe "set_status('deleted')" method is something the controller *probably* doesn't care about; more the controller just wants your model to perform a specific unit of logic. Moreover, it doesn't make sense (as far as I can see) to call a separate controller's actions outside the realm of the HTTP redirect dance. Controllers exist to sit in between your user's request and the view/content that they want rendered back, having the appropriate models perform whatever actual logic is required to make this happen. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk@googlegroups.com To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---