Even when the following general validation[1] fails, the changed state_event param passed from the form triggers it's transition callbacks to be fired.
validate :validate_name_change, :on => :update
def validate_name_change
if name.to_s != name_was.to_s
errors.add(:name, "can't be changed")
return false
end
end
[1] not inside the state_machine block.
What's the way out? Sorry I have been asking a lot here lately, but I guess my questions and their subsequent answers would help others in doubt.