2013-06-27 57 views
1

我試圖插入記錄,但活動記錄做相同的魔術,我不明白!?!?!? 我的測試代碼:first_or_initialize錯誤或發生了什麼

UserToken.where(:user_id=>2).first_or_initialize.tap do |user| 
    user.token = 'token', 
    user.type_id = 0, 
    user.user_id = 2 
    user.save! 
    end 

結果:

UserToken Load (56.9ms) SELECT `user_tokens`.* FROM `user_tokens` WHERE `user_tokens`.`user_id` = 2 LIMIT 1 
    (56.4ms) BEGIN 
    (56.4ms) UPDATE `user_tokens` SET `type_id` = 0, `token` = '---\n- token\n- 0\n- 2\n', `updated_at` = '2013-06-27 20:19:22' WHERE `user_tokens`.`id` = 19 
    (56.3ms) COMMIT 
=> #<UserToken id: 19, user_id: 2, token: ["token", 0, 2], type_id: 0, created_at: "2013-06-27 20:14:11", updated_at: "2013-06-27 20:19:22"> 

爲什麼更新令牌token = '--- \正令牌\正0 \ N-2 \ N',令牌:[」令牌「,0,2]我只是試圖記錄'令牌'不是陣列?!?!?!?

+0

真的懷疑這是'first_or_initialize'的錯誤。可能罪魁禍首是在你的模型代碼中。 – gregates

+0

也許在你的模型中你有'serialize token'之類的東西? – Aguardientico

回答

2

你不應該有這些逗號有

UserToken.where(:user_id=>2).first_or_initialize.tap do |user| 
    user.token = 'token' 
    user.type_id = 0 
    user.user_id = 2 
    user.save! 
    end 

或分號線恩德斯:

UserToken.where(:user_id=>2).first_or_initialize.tap do |user| 
    user.token = 'token'; 
    user.type_id = 0; 
    user.user_id = 2; 
    user.save!; 
    end 

你擁有了它你傳遞的另外兩個分配給user.token的方式。你做了什麼結果是這樣的,因爲ruby表達式總是有返回值,變量總是返回自己:

user.token = 'token', 0, 2