Ruby on rails t在这个问题上扮演了一个角色。所以你的项目中没有couter\u缓存?那么,它看起来肯定像框架中的bug。 294# def destroy 295# 296# messages = {} 297# 298# # Create the @pro

Ruby on rails t在这个问题上扮演了一个角色。所以你的项目中没有couter\u缓存?那么,它看起来肯定像框架中的bug。 294# def destroy 295# 296# messages = {} 297# 298# # Create the @pro,ruby-on-rails,ruby,activerecord,ruby-on-rails-3.2,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 3.2,Rails Activerecord,t在这个问题上扮演了一个角色。所以你的项目中没有couter\u缓存?那么,它看起来肯定像框架中的bug。 294# def destroy 295# 296# messages = {} 297# 298# # Create the @proj_clef_repartition objet 299# unless creer_instance_objet_et_render_parent_si_impossible(ProjClefRepartition, params[:i


t在这个问题上扮演了一个角色。所以你的项目中没有
couter\u缓存
?那么,它看起来肯定像框架中的bug。
294# def destroy
295#
296#    messages = {}
297#
298#    # Create the @proj_clef_repartition objet
299#    unless creer_instance_objet_et_render_parent_si_impossible(ProjClefRepartition, params[:id], params[:proj_sous_projet_id], [{:proj_sous_projet => [:proj_charges, {:proj_projet => {:proj_mesure => :proj_paquet_mesures}}]}]) then
300#
301#      enregistrement_ok = false
302# 
303#      @objet_de_l_erreur = @proj_clef_repartition
304#      @proj_sous_projet = @proj_clef_repartition.proj_sous_projet
305#      @proj_projet = @proj_sous_projet.proj_projet
306#      @proj_mesure = @proj_projet.proj_mesure
307#      @proj_paquet_mesures = @proj_mesure.proj_paquet_mesures
308#      @hist_version_sous_projet = HistVersionSousProjet.where(:proj_sous_projet_id => @proj_sous_projet.id).order{version.desc}.limit(1)[0]
309#
310#      @proj_clefs_repartition = @proj_sous_projet.proj_clefs_repartition
311#      @proj_charges = @proj_sous_projet.proj_charges
312#      @total_charges =  BigDecimal.new('0', 18)
313#
314#      # =================== DEBUT DE LA TRANSACTION ===================
315#      ProjClefRepartition.transaction do
316#
317#
318#        if sauver_version(@proj_clef_repartition, messages, nil, 3, nil, true) then
319#
320#          logger.debug "#{@proj_clef_repartition.blank?}"
321#          logger.debug "#{@proj_clef_repartition.class} (#{@proj_clef_repartition.id})"
322#          if @proj_clef_repartition.destroy then
323#            ajouter_message(t('activerecord.successful.messages.deleted', :model => ProjClefRepartition.model_name.human), :success, messages)
324#            enregistrement_ok = true
325#          else
326#            ajouter_message(t('activerecord.warning.messages.deleted', :model => ProjClefRepartition.model_name.human), :alert, messages)
327#          end # proj_clef_repartition.destroy
328#
329#        end # sauver_version(@proj_clef_repartition, messages, nil, 3, nil, true) 
330#
331#
332#        raise ActiveRecord::Rollback unless enregistrement_ok
333#
334#      end # ProjClefRepartition.transaction
335#      # =================== FIN DE LA TRANSACTION ===================
336#
337#
338#      afficher_maintenant(messages)
339#
340#      render 'projects/proj_sous_projets/show'
341#
342#    end # creer_instance_objet_et_render_parent_si_impossible(ProjClefRepartition, params[:id], params[:proj_sous_projet_id])
343#
344#
345#  rescue ActiveRecord::StatementInvalid => exception
346#
347#
348#
349#
350#
351#    @hist_sous_projet = @hist_version_sous_projet.hist_sous_projet
352#    ajouter_message(t('activerecord.warning.messages.invalid_db_statement'), :error, messages)
353#    ajouter_erreur_concernant_exception_statement_invalid(exception, @objet_de_l_erreur)
354#    afficher_maintenant(messages)
355#    render 'projects/proj_sous_projets/show'
356#
357#
358#  rescue ActiveRecord::DeleteRestrictionError => exception
359#
360#
361#    @hist_sous_projet = @hist_version_sous_projet.hist_sous_projet
362#
363#    ajouter_message(t('activerecord.warning.messages.delete_restriction', :model => ProjClefRepartition.model_name.human), :error, messages)
364#    afficher_maintenant(messages)
365#    render 'projects/proj_sous_projets/show'
366#
367#  end # destroy
  has_many :proj_contributions, :dependent => :restrict
  has_many :proj_charges, :dependent => :restrict
require Rails.root.to_s + '/lib/opf_modules/opf_outils_models.rb'

class ProjClefRepartition < ActiveRecord::Base

  include OutilsModels

  # Renforcement de la sécurité avec declarative_authorization Gem
  using_access_control

  # Modifier les attributs contenant des string vides en des nil
  before_validation :blank_string_attributes_to_nil

  attr_accessible :code, :designation, :proj_sous_projet_id, :motivation, :pub_modification_id

  validates :code, :designation, :proj_sous_projet_id, :pub_modification_id, :admin_utilisateur_id, :presence => true

  attr_accessor :montant_contributions_total

  validates  :code, :length => { :in => 2..19 }, :uniqueness => { :case_sensitive => false }

  validates :designation, :length => { :in => 2..60 }
  validates :motivation, :length => { :in => 5..600 }, :allow_blank => true

  validate :clef_repartition_exclusive_a_un_unique_sous_projet

  belongs_to :proj_sous_projet
  belongs_to :pub_modification
  belongs_to :admin_utilisateur
  has_many :proj_contributions, :dependent => :restrict
  has_many :proj_charges, :dependent => :restrict
  has_many :hist_versions_clefs_repartition, :class_name => HistVersionClefRepartition

  # Méthode utilisée par la collection_select box
  def texte_pour_collection_select
    # Groupé les attributs afin d'améliorer la compréhension de l'utilisateur lors du choix par la select box
    self.code + ' - ' + self.designation
  end

# -------------------------------------------------------------
#  Validations speciale
# -------------------------------------------------------------
private

  def clef_repartition_exclusive_a_un_unique_sous_projet

    # Lors de la création d'une nouvelle clé de répartition, l'ID est nil, et il n'y a aucun risque que la clef soit déjà utilisée par une charge
    unless id.nil? then

      # Trouver toutes les charges utilisant cette clé de répartition
      proj_charges = ProjCharge.where(:proj_clef_repartition_id => id)

      proj_charges.each do |c|
        if c.proj_sous_projet_id != proj_sous_projet_id then
          errors.add(:proj_sous_projet_id, I18n.t('activemodel.warning.messages.reaffectation_impossible', :modele_enfant => I18n.t('projects.proj_charges.model'), :modele_parent => I18n.t('projects.proj_sous_projets.model'), :modele => I18n.t('projects.proj_clefs_repartition.model')))
          break
        end # c.proj_sous_projet_id != proj_sous_projet_id
      end # proj_charges.each

    end # id.nil?
  end # clef_repartition_exclusive_a_un_unique_sous_projet
end
belongs_to :proj_clef_repartition