无法找到由seeds.rb创建的用户

时间:2016-04-02 19:02:03

标签: ruby-on-rails ruby activerecord

我有一个关于发生在我身上的奇怪事情的问题。

我有一个rails应用程序,我预先填充了一些预先定义的用户,我运行命令rake db:seed并创建这些用户,我检查rails c并在那里运行User.all他们是。我运行User.find(1)它会返回一个用户。好的,没问题。

但是,当我启动应用程序时,我在user.rb中有一个代码

User.find(1) # I know that this user will have a fixed id throughout every environment

但......它没有找到,我得到ActiveRecord::RecordNotFound例外。

我的目标是在数据库中创建新用户后,从User.find(1)接收欢迎消息。它是否与ActiveRecord回调中的事实相关,after_commit

编辑:

我的代码很简单,在创建新用户后,它会收到来自用户where(email: "theemail").first的消息

所以我的user.rb模型有以下片段:

after_commit :send_welcome_message

def send_welcome_message
  welcome_user = User.where(email: "xyz").first
  Conversation.send_welcome_message(self, welcome_user) 
end

我在send_welcome_message中放置了一个调试器User.all.size并返回1.我使用了rails控制台,同样的查询返回了5.

2 个答案:

答案 0 :(得分:1)

因此找不到ID为1的用户。这并不意味着您无法访问种子创建的用途。删除所有用户时,ID号不一定会重置为1。

即。如果删除用户1,则您创建的下一个用户仍将具有ID 2

解决方案可能是使用一些不同的方法来查找用户。即您可以在种子中为它们设置一个特殊的name,然后使用该名称查找它们。

答案 1 :(得分:0)

如果您创建了三个用户,然后将其全部删除,则您的第四个用户的ID值为4.您可以通过在拨打User.all时检查用户的ID来验证这一点

正如上面提到的@maxpleiner,也许有可能通过他们的名字来查找它们。 after commit块可能会阻止您在应用程序周围传递该用户,因为它会单独调用自身。如Rails: Can you pass arguments to the after_create method?中所述,您无法将记录传递给后创建。您可以做的是添加一些自定义代码,在您创建将处理您的用例的用户后立即放置该代码。