2016-04-02 23 views
0

我有一个关于发生在我身上的奇怪事情的问题。不能找到seeds.rb创建的用户

我有一个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.我用导轨控制台,同样的查询,返回5.

+0

您是否正在运行** rake db:seed **在您运行系统的相同环境中?我的意思是......一个人可能会** RAILS_ENV =测试rake db:seed **然后** RAILS_ENV =开发rails s **然后会出现混乱。 –

+0

我知道这是我做过的一个愚蠢的问题。但它发生。你知道...... –

+1

有没有这样的事情愚蠢的问题,我没有指定的铁轨环境,但它在开发 – tvieira

回答

1

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

I.e.如果删除用户1,则您创建的下一个用户仍将拥有ID 2

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

+0

如果我们可能会建议OP执行** rake db:drop **和** rake db:create **以在播种之前重新创建数据库。这将有助于了解这是否真的是问题所在。 –

0

如果创建三个用户,然后将它们全部删除,你是第四个用户将有值id 4.您可以通过检查,当你调用用户的ID验证这个User.all

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

相关问题