例如,我正在搜索DB中的某些內容,Model.find_by(slug: :name)
。它在本地環境中工作正常,但在測試中,它給了我零。 (我三重檢查它,並有記錄在分貝)。Rails無法在db中找到記錄(但它實際存在)
我甚至添加了調試來查看日誌。當我做Model.where(slug: :name).count
它返回我0。但記錄真的存在與這個slug名稱。
我在哪裏可以解決這個問題?
例如,我正在搜索DB中的某些內容,Model.find_by(slug: :name)
。它在本地環境中工作正常,但在測試中,它給了我零。 (我三重檢查它,並有記錄在分貝)。Rails無法在db中找到記錄(但它實際存在)
我甚至添加了調試來查看日誌。當我做Model.where(slug: :name).count
它返回我0。但記錄真的存在與這個slug名稱。
我在哪裏可以解決這個問題?
運行測試時,Rails使用不同的數據庫。常見的約定是projectname_development vs projectname_test(最後是projectname_production)。
通常測試系統還會在運行測試之前清除測試數據庫。這是由於兩個原因:
您必須爲每個單獨的測試設置您的測試數據。你沒有提到你使用的是什麼測試系統。
看一看Fixtures和Factory Girl。
對不起,但它不是。我知道這件事。我說的是'如果model.find_by(slug::name)返回nil,如果記錄實際存在於DB中,那麼在模型表中。 –
存儲在測試數據庫中的數據是暫時的,在測試結束後會被刪除。 開發數據庫獨立於測試數據庫。
您檢查以確保開發和測試數據庫相同嗎? –
*「我三重檢查了它,並且在db中有記錄」*三倍檢查了您的測試數據庫或您的開發數據庫,因爲它們默認情況下通常是獨立的數據庫並且通過設計 – engineersmnky
不,沒有。但我檢查了要求的記錄。例如,我添加了調試器:使用「request.slug」,它返回給我'管理',然後我去測試服務器數據庫,並發現有'管理'的記錄。所以記錄存在。 –