好的,这很奇怪,因为这已经有好几个月了,直到现在。
有问题的代码在这里......
users_controller.rb
def create #line 20
User.transaction do #line 21
user = User.new(user_params) #line 22
if user.save #line 23
...
private
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
现在所有这些对于MONTHS来说都很有用。然后我决定要添加一个' device_token'用户模型的列。所以......
My-MacBook-Pro:fffapi c$ bundle exec rake db:migrate
== 20150329174839 AddDeviceTokenToUser: migrating =============================
-- add_column(:users, :device_token, "char(64)", {:null=>true})
-> 0.0015s
== 20150329174839 AddDeviceTokenToUser: migrated (0.0016s) ====================
糟糕!等一等。这实际上并不是我想要的表格。我想把它放在另一张桌子上。让我们摆脱最后的改变......
My-MacBook-Pro:fffapi c$ bundle exec rake db:rollback
== 20150329174839 AddDeviceTokenToUser: reverting =============================
-- remove_column(:users, :device_token, "char(64)", {:null=>true})
-> 0.0023s
== 20150329174839 AddDeviceTokenToUser: reverted (0.0024s) ====================
现在,此时我已经重启了服务器和rails控制台3次。
但是,当我使用
执行以下POST到http://localhost:3000/api/v1/users/
时
{
"user":
{
"name": "johnny",
"email": "j@j.com",
"password": "jjjjjj",
"password_confirmation": "jjjjjj"
}
}
我从服务器收到以下错误...
NoMethodError (undefined method `device_token' for #<User:0x007fc2e7d9c338>):
app/controllers/api/v1/users_controller.rb:23:in `block in create'
app/controllers/api/v1/users_controller.rb:21:in `create'
这怎么可能?它甚至在谈论什么device_token,它不再存在。
答案 0 :(得分:0)
我没有想法,为什么它没有回滚。
但也许您有一些在用户创建时运行的验证或回调?
或者只是添加一些
Rails.logger.debug(user_params)
line to UsersController #create方法检查params是否真的不包含device_token字段。
UPD:你也可以grep你的项目来找到这个方法调用
grep -r 'device_token' ./app