não está bem conseguido porque está a fazer uma comparação inutil que pode ficar fora do método, ficando tudo muito mais eficiente. já foi descartado entretanto, mas já que insistes:
```
if defined?(ActiveRecord::Base) && self.class.ancestors.include?(ActiveRecord::Base)
  define_method("make_#{state_name}") do
    self.update_attributes state: state_name
  end
else
  define_method("make_#{state_name}") do
    self.state = state_name
  end
end
```