运行规范时的警告消息

时间:2016-02-11 03:08:24

标签: ruby-on-rails ruby-on-rails-4 rspec-rails

我有以下内容:

  def toggle_follow_user tmp_id
    user=User.find(tmp_id)

但是当我运行规格时,我收到以下警告:

DEPRECATION WARNING: You are passing an instance of ActiveRecord::Base to `find`. Please pass the id of the object by calling `.id`. 

它试图告诉我什么,我该如何解决?

2 个答案:

答案 0 :(得分:4)

仅仅是为了测试...我不确定你传入的是什么被分配给tmp_id参数,但是我猜测它是一个活动的记录对象,你能试试吗?

def toggle_follow_user tmp_id
  user=User.find(tmp_id.id)
end

如果这样可行,那么因为你发送到toggle_follow_user的任何内容都是一个完整的活动记录" row"现在,Find想要一个整数(表示ID ...它曾经用于将其拉出来,但看起来似乎已经消失了)

答案 1 :(得分:0)

您正在呼叫toggle_follow_user(a_user),而不是toggle_follow_user(a_users_id)。试试这个:

def toggle_follow_user(user)
  # just delete the line where you ::find the user, you're already passing it in

这将解决此特定问题 - 但请检查它是否会破坏您的代码中的任何其他内容!

如果 希望在方法中传递用户的idfind,那么在堆栈跟踪中查看一两个调用,因为它是整个对象正在传递。