类的NoMethodError未定义方法的奇怪实例

时间:2015-03-30 17:25:20

标签: ruby-on-rails

好的,这很奇怪,因为这已经有好几个月了,直到现在。

有问题的代码在这里......

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,它不再存在。

1 个答案:

答案 0 :(得分:0)

我没有想法,为什么它没有回滚。

但也许您有一些在用户创建时运行的验证或回调?

或者只是添加一些

Rails.logger.debug(user_params)

line to UsersController #create方法检查params是否真的不包含device_token字段。

UPD:你也可以grep你的项目来找到这个方法调用

grep -r 'device_token' ./app