我在类型attempts
的数据库中有一个属性integer
(初始值为 0 )
当我这样做时@user.attempts += 1
,它会抛出TypeError: can't convert Fixnum into String
因此,我得出结论,rails 不会根据属性的数据类型自动转换属性。
当我做
@user.attempts.to_i +=1
它抛出NoMethodError: undefined method 'to_i=' for "0":String
当我这样做时,
@user.attempts.to_i = @user.attempts.to_i + 1
它再次抛出NoMethodError: undefined method 'to_i=' for "0":String
。
和这个,
@user.attempts = @user.attempts.to_i + 1
工作正常。
我认为原因是当我这样做时@user.attempts.to_i + 1
,它实际上改变了@user.attempts
左侧。
有人可以对这种行为有所了解吗?
编辑
移民
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :email_pass
t.integer :attempts
t.timestamps
end
end
end
创建表脚本
-- Table: users
-- DROP TABLE users;
CREATE TABLE users
(
id serial NOT NULL,
email character varying(255),
email_pass character varying(255),
attempts character varying(255),
created_at timestamp without time zone NOT NULL,
updated_at timestamp without time zone NOT NULL,
CONSTRAINT users_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
ALTER TABLE users
OWNER TO jashwant;
我看到在 dbattempts
中是字符类型。
那么,改变其数据类型的正确方法应该是什么。我的第一个问题也很突出,这种类型转换的原因是什么?