2012-03-30 13 views
22

Tôi đang bối rối. Tôi có một ứng dụng đường ray (3.1.3) mà tôi đã xây dựng nơi tôi vừa mới thêm vào (2.0) để tạo ra một mô hình người dùng và xác thực tương ứng đi kèm với nó. Sau khi tôi cài đặt và chạy thử nghiệm rake, TẤT CẢ các thử nghiệm của tôi đã ném cùng một lỗi. Trên cả hai bài kiểm tra đơn vị và chức năng, tôi gặp lỗi như sau:Devise đã phá vỡ tất cả các thử nghiệm của tôi - ActiveRecord :: RecordNotUnique PG :: Lỗi

ERROR should get index (0.05s) 
     ActiveRecord::RecordNotUnique: PG::Error: ERROR: duplicate key value violates unique constraint "index_users_on_email" 
DETAIL: Key (email)=() already exists. 
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2012-03-30 04:13:13', '2012-03-30 04:13:13', 298486374) 
     /Users/myname/.rvm/gems/[email protected]/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec' 

Tôi không hiểu tại sao điều này ảnh hưởng đến TẤT CẢ các bài kiểm tra của tôi hoặc điều gì có thể gây ra. Có ai nhìn thấy một cái gì đó như thế này trước đây? Tôi làm gì sai ở đây?

Mọi lời khuyên/trợ giúp sẽ được đánh giá cao!

Cảm ơn!

+0

Mô hình người dùng của bạn hiện có cột/trường email không? – kafuchau

+0

tham khảo tại đây https://github.com/plataformatec/devise/issues/1356 và https://github.com/norman/friendly_id/issues/152 –

+4

Cảm ơn bạn đã cân nhắc ở đây - tôi đã tự mình tìm ra điều này. Vấn đề có liên quan đến dữ liệu thử nghiệm được tự động điền vào đồ đạc ... không có email nào được cung cấp, gây ra sự cố –

Trả lời

1

Devise đang mong đợi một cột email duy nhất và bạn đang cố lưu nhiều người dùng bằng email = nil. Kiểm tra đồ đạc thử nghiệm của bạn, bạn có thể quên đặt email cho người dùng cố định của mình.

+0

oops. chỉ thấy các bình luận. vui vì bạn đã tìm ra. –

32

Chỉ trong trường hợp ai đó đến với câu hỏi này, câu trả lời được cung cấp bởi Cam Norgate trong một nhận xét.

Vấn đề nằm ở chỗ kiểm tra tập tin/fixtures/users.yml

one: {} 
# column: value 
# 
two: {} 
# column: value 

Nó được attemting để tạo ra hai người dùng trống (một và hai), không có email. Chỉ cần đặt một bình luận trước hai dòng chưa được chú ý.

1

Lỗi này có thể xảy ra vì nhiều lý do. Nó giúp xem xét các backtrace đầy đủ của PG :: Lỗi: ERROR, bạn sẽ thấy một số mã ứng dụng/lib mà nên gây ra lỗi này, cho trường hợp sử dụng cụ thể của bạn.

Trong trường hợp của tôi, đó là vì tôi đã trộn lẫn người trợ giúp đăng nhập/đăng xuất với đăng xuất tùy chỉnh của riêng tôi qua người trợ giúp capybara (nhấp vào "đăng xuất") trong bộ thông số kỹ thuật của tôi. Devise sau đó gọi một số phương thức để cập nhật các trường người dùng thông qua update_tracked_fields! và tại thời điểm đó phải tạo một người dùng trống đã cố lưu.

Vì đây là người trợ giúp đặc biệt (sử dụng warden/rack etc), nó đã xảy ra ngoài luồng ứng dụng ray của tôi nên giải thích tại sao tôi lại gặp lỗi thô thay vì nhấn xác thực mô hình của mình.

Các vấn đề liên quan