Converting class or type under single table inheritance


#1

I think this query is more Ruby than Rails but I’m writing a Rails app
using single table inheritance

class User < ActiveRecord::Base
end

class AdminUser < User
end

The type column in the users table holds the class name for each
instance

Now I want to convert a User object into an AdminUser. Is this
possible? Does anyone know the best way to do this?

Thanks in advance
levent


#2

user[:type] = AdminUser


#3

Joey wrote:

user[:type] = AdminUser

that doesn’t seem to work… that throws “TypeError: can’t dump anonymous
class Class”

I’ve already tried stuff like:
@user = User.find(1) # an object of type User not AdminUser
@user.type = AdminUser
@user.save # Throws the same error as above

@user[:type] = AdminUser
@user.save # Throws the same error


#4

On Mon, May 22, 2006 at 06:43:31PM +0900, Levent A. wrote:
} Joey wrote:
} > user[:type] = AdminUser
}
} that doesn’t seem to work… that throws “TypeError: can’t dump
anonymous
} class Class”
}
} I’ve already tried stuff like:
} @user = User.find(1) # an object of type User not AdminUser
} @user.type = AdminUser
} @user.save # Throws the same error as above
}
} @user[:type] = AdminUser
} @user.save # Throws the same error

You can’t set it to the class, you need to set it to the name. It’s a
subtlety:

user[:type] = ‘AdminUser’

–Greg


#5

Gregory S. wrote:

On Mon, May 22, 2006 at 06:43:31PM +0900, Levent A. wrote:
} Joey wrote:
} > user[:type] = AdminUser
}
} that doesn’t seem to work… that throws “TypeError: can’t dump
anonymous
} class Class”
}
} I’ve already tried stuff like:
} @user = User.find(1) # an object of type User not AdminUser
} @user.type = AdminUser
} @user.save # Throws the same error as above
}
} @user[:type] = AdminUser
} @user.save # Throws the same error

You can’t set it to the class, you need to set it to the name. It’s a
subtlety:

user[:type] = ‘AdminUser’

–Greg

I’m an idiot :slight_smile:

Thanks… I can’t believe I didn’t think of that… that’s what happens
when you spend hours on a simple thing, over thinking the problem…
thanks again

levent