I would like to know if there's a way to when doing STI the update_attributes, validate the attributes based on the new class type?
For e.g. suppose i have: class A < ActiveRecord::Base end class B < A validates :attribute_z, :presence => true end class C < A validates :attribute_x, :presence => true validates :attribute_y, :presence => true end If i run (the way rails is implemented): b = A.find('b-id') b.update_attributes({ 'type' => 'C', :attribute_x => 'present', :attribute_y => 'present', :attribute_z => nil }) # will return false with errors on 'attribute_z must be present' I've tried with #becomes[http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-becomes]: b = A.find('b-id') b = b.becomes(C) b.update_attributes({ 'type' => 'C', :attribute_x => 'present', :attribute_y => 'present', :attribute_z => nil }) # this works partially, because the validations are ok but when i look to console i get something like: UPDATE "as" SET "type" = 'c', "attribute_z" = NULL, "attribute_y' = 'present', 'attribute_x' = 'present' WHERE "as"."type" IN ('C') AND "as"."id" = 'b-id' # which is terrible because it's looking for a record of B type on the C types. i could put :if => proc { |record| record.type == 'C' } on the validations and put the validations at A class. But it wouldn't make sense to have the subclasses. The difference basically of B and C is only in the validation behavior. (I have many validations on both types) -- 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. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/kD4U2PKWfhMJ. For more options, visit https://groups.google.com/groups/opt_out.