6

Trong ứng dụng đường ray của tôi (v: 3.1) được triển khai trên heroku, tôi nhận được nhiều đối tượng cùng một id trong bộ nhớ. nhật ký bảng điều khiển heroku của tôi:Các đối tượng khác trong bộ nhớ có cùng id?

>> Project.find_all_by_id(92).size 
=> 2 
>> ActiveRecord::Base.connection.execute('select * from projects where id=92').to_a.size 
=> 1 

Làm cách nào có thể? Điều gì có thể là vấn đề?

+0

Bạn cũng có thể đăng các câu lệnh SQL được tạo ra không? – rocketscientist

+1

Các chẩn đoán khác mà bạn có thể đăng sẽ giúp thu hẹp nó xuống: 'Project.find_all_by_id (92) .method (: size) .source_location' (Đã ghi đè điều gì đó .size?) Và' Project.find_all_by_id (92) .to_a.size' (Nó hoạt động khi nó không phải là một hiệp hội?). –

Trả lời

1

Giải pháp

rõ ràng Không có mục trùng lặp trong cơ sở dữ liệu của bạn theo truy vấn SQL của bạn.

Có thể kích thước hoặc chiều dài phương pháp trong lớp của bạn Dự án đã bị ghi đè. Tôi đã thử find_all_by_id và truy vấn SQL có vẻ đúng.

1.9.2-p180 :006 > Script.find_all_by_id(1).size 
    Script Load (0.7ms) SELECT "scripts".* FROM "scripts" WHERE "scripts"."id" = 1 
=> 1 

Gợi ý

Nếu bạn muốn đếm hồ sơ bạn nên làm theo cách này

Script.where(id: 1).size 
    (0.8ms) SELECT COUNT(*) FROM "scripts" WHERE "scripts"."id" = 1 
=> 1 

Bởi vì, như bạn thấy, số lượng được thực hiện bởi cơ sở dữ liệu của bạn và không phải bởi ruby. Đối với một chục hàng bạn sẽ không thấy sự khác biệt, nhưng nếu bạn có hàng ngàn hoặc hàng triệu ...

+0

Vâng, tôi đặt cược bạn có một cột có tên là 'kích thước' trong bảng dự án của bạn, hoặc một số anh chàng thông minh đã viết: 'def size; to_do_items.count; end' hoặc tương tự. :-) –

+0

@ Irongaze.com Một cột có tên 'kích thước' có thể là một khả năng ... Tôi không nghĩ về nó. :) – basgys

0
irb(main):023:0> ActiveRecord::Base.connection.execute('select count(*) from users where address_id = 22').fetch_hash 
=> {"count(*)"=>"4"} 
irb(main):024:0> User.find_all_by_address_id(22).size 
=> 4 

bạn muốn tài liệu tra cứu tốt hơn về Mysql :: quả đầu tiên

http://rubydoc.info/gems/mysql/2.8.1/frames

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