2013-06-27 37 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