Why would an int column in a join table be a String class in

i’ve got an issue with integer columns in the database becoming strings
in
the model and I’m not sure why this is happening. perhaps someone can
explain.

given the following setup (simplified for example)

tables:

users

id - int
name - varchar(60)

roles

id - int
name - varchar(60)

roles_users (join table)

role_id - int
user_id - int
default_flag - int

data:

user => 1, ‘joe’
role => 1, ‘admin’
roles_users => 1, 1, 1

models:

class User < ActiveRecord::Base
has_and_belongs_to_many :roles
end

class Role < ActiveRecord::Base
has_and_belongs_to_many :users
end

console:

user = User.find(1)
=> #<User:0xb771b494 @attributes={“id”=>“1”, “location_id”=>nil,
“active_flag”=>“1”, “name”=>“joe”}

user.roles[0].default_flag.class
=> String

user.roles[0].id.class
=> Fixnum

shouldn’t default_flag be a Fixnum?

On 12/14/05, Chris H. [email protected] wrote:

i’ve got an issue with integer columns in the database becoming strings in
the model and I’m not sure why this is happening. perhaps someone can
explain.

Is this possibly the same issue as this ticket?
http://dev.rubyonrails.org/ticket/240

–Wilson.

thanks. sometimes i forget to go look at trac.

yes, it looks to be the same…i see a fix has been pushed back to
1.x…noproblem, i can always do == “1” in the meantime.

to_i also works. :slight_smile: