I have two models: Project and Tags
class Project < ActiveRecord::Base
has_many :tags, :dependent => :destroy
end
class Tag < ActiveRecord::Base
belongs_to :project, :touch => true
end
And every project must have at least one tag (I skipped the
valiations). So when project.destroy is called, I get the following
error message:
...application/vendor/rails/activerecord/lib/active_record/validations.rb:1090:in
save_without_dirty!'
...application/vendor/rails/activerecord/lib/active_record/dirty.rb:87:insave_without_transactions!'
...application/vendor/rails/activerecord/lib/active_record/transactions.rb:200:in
save!'
...application/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb:136:intransaction'
...application/vendor/rails/activerecord/lib/active_record/transactions.rb:182:in
transaction'
...application/vendor/rails/activerecord/lib/active_record/transactions.rb:200:insave!'
...application/vendor/rails/activerecord/lib/active_record/transactions.rb:208:in
rollback_active_record_state!'
...application/vendor/rails/activerecord/lib/active_record/transactions.rb:200:insave!'
...application/vendor/rails/activerecord/lib/active_record/timestamp.rb:37:in
touch'
...application/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:221:insend'
...application/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:221:in
method_missing'
...application/vendor/rails/activerecord/lib/active_record/associations.rb:1380:inbelongs_to_touch_after_save_or_destroy_for_project'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:178:in
send'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:178:inevaluate_method'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:166:in
call'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:93:inrun'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:92:in
each'
...application/vendor/rails/activesupport/lib/active_support/callbacks.rb:92:insend'
It seems that every tag.destroy call project.touch, and my guess
the last touch is invalid because the project needs at least one
tag. In my opinion, when the project is destroyed it shouldn't be
touched at all.
Does someone know a workaround? Thanks