How do I prevent deletion of parent if it has child records?

前端 未结 4 874
一生所求
一生所求 2020-12-24 01:00

I have looked through the Ruby on Rails guides and I can\'t seem to figure out how to prevent someone from deleting a Parent record if it has Children. For example. If my

相关标签:
4条回答
  • 2020-12-24 01:22
    class Customer < ActiveRecord::Base
      has_many :orders, :dependent => :restrict # raises ActiveRecord::DeleteRestrictionError
    

    Edit: as of Rails 4.1, :restrict is not a valid option, and instead you should use either :restrict_with_error or :restrict_with_exception

    Eg.:

    class Customer < ActiveRecord::Base
      has_many :orders, :dependent => :restrict_with_error
    
    0 讨论(0)
  • 2020-12-24 01:26

    You could do this in a callback:

    class Customer < ActiveRecord::Base
      has_many :orders
      before_destroy :check_for_orders
    
      private
    
      def check_for_orders
        if orders.count > 0
          errors.add_to_base("cannot delete customer while orders exist")
          return false
        end
      end
    end
    

    EDIT

    see this answer for a better way to do this.

    0 讨论(0)
  • 2020-12-24 01:26

    Try using filters to hook in custom code during request processing.

    0 讨论(0)
  • 2020-12-24 01:40

    One possibility would be to avoid providing your users a link to deletion in this scenario.

    link_to_unless !@customer.orders.empty?
    

    Another way would be to handle this in your controller:

    if !@customer.orders.empty?
      flash[:notice] = "Cannot delete a customer with orders"
      render :action => :some_action
    end
    

    Or, as Joe suggests, before_filters could work well here and would probably be a much more DRY way of doing this, especially if you want this type of behavior for more models than just Customer.

    0 讨论(0)
提交回复
热议问题