2016-04-02 26 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?中所述,您無法將記錄傳遞到創建後。你可以做的是添加一些自定義代碼,在你創建用戶之後立即放置它來處理你的用例。

相關問題