diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index c7a816bc0..4d8666836 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -19,6 +19,7 @@ class Admin::DomainsController < ApplicationController flash[:notice] = I18n.t('shared.domain_added') redirect_to [:admin, @domain] else + @domain.domain_statuses.build if @domain.domain_statuses.empty? flash.now[:alert] = I18n.t('shared.failed_to_add_domain') render 'new' end @@ -34,6 +35,8 @@ class Admin::DomainsController < ApplicationController end def edit + @domain.domain_statuses.build if @domain.domain_statuses.empty? + params[:registrar] = @domain.registrar params[:domain_owner_contact] = @domain.owner_contact end @@ -42,6 +45,7 @@ class Admin::DomainsController < ApplicationController if @domain.update(domain_params) redirect_to [:admin, @domain] else + @domain.domain_statuses.build if @domain.domain_statuses.empty? render 'edit' end end diff --git a/app/models/domain.rb b/app/models/domain.rb index a6b84aba4..21262db6d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -19,7 +19,7 @@ class Domain < ActiveRecord::Base accepts_nested_attributes_for :nameservers, allow_destroy: true has_many :domain_statuses, dependent: :delete_all - accepts_nested_attributes_for :domain_statuses, allow_destroy: true + accepts_nested_attributes_for :domain_statuses, allow_destroy: true, reject_if: proc {|attrs| attrs[:value].blank?} has_many :domain_transfers, dependent: :delete_all @@ -42,6 +42,7 @@ class Domain < ActiveRecord::Base validate :validate_nameservers_uniqueness, if: :new_record? validate :validate_tech_contacts_uniqueness, if: :new_record? validate :validate_admin_contacts_uniqueness, if: :new_record? + validate :validate_domain_statuses_uniqueness, if: :new_record? # validates_associated :nameservers attr_accessor :adding_admin_contact @@ -149,6 +150,18 @@ class Domain < ActiveRecord::Base end end + def validate_domain_statuses_uniqueness + validated = [] + domain_statuses.each do |status| + next if status.value.blank? + existing = domain_statuses.select { |x| x.value == status.value } + next unless existing.length > 1 + validated << status.value + errors.add(:'domain_statuses.value', 'duplicate') + status.errors.add(:value, :taken) + end + end + def validate_period return unless period.present? if period_unit == 'd'