我有一個attribue 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;
我看到,在DB attempts
是字符類型。
那麼,應該改變它的數據類型的正確方法。 而且我也非常看好第一個問題,這種類型轉換的原因是什麼?
顯示您的遷移腳本,以及數據庫中的「SHOW CREATE TABLE」。 –
@SergioTulentsev,我已經更新了我的問題。 – Jashwant