Проблема с подсчетом экземпляров ActiveRecord в массиве - PullRequest
0 голосов
/ 11 марта 2011

Я использую Ruby on Rails 3 и хотел бы решить проблему с подсчетом экземпляров ActiveRecord в массиве.


У меня есть этот код

data = Account.where({:name => "Test_name", :city => "Test_city"}).limit(10)

Отладка data

#<Account:0x000001029d2da0>#<Account:0x000001029d2c60>#<Account:0x000001029d2bc0>#<Account:0x000001029d2b20>

data проверка

"[#<Account name: \"Test_name\", city: \"Test_city\">, #<Account … >, #<Account id… >, …]"

Сомнение : ## <...> должно быть что-то вроде #<Account...>,#<Account...>,<...> (запятые)?


Если в моем коде я использую следующее

data_count = data.count

data_count является

nil

Почему это nil? Как мне считать счета?


  • Если я использую result = data.class, отладка result будет nil, но если я использую result = data.class, отладка "{\"inheritable_attributes\":{}}".
  • Если я использую Account.find_by_name("Test_name") вместо Account.where(...), я получаю те же результаты, что и выше.

Ответы [ 3 ]

0 голосов
/ 11 марта 2011

Используйте следующее:

data = Account.where("id = 2 and email = 'test_email@test.com'")
0 голосов
/ 11 марта 2011

Чтобы докопаться до сути вещей, запустите консоль rails с:

$ rails c

Учитывая, что Account - это модель ActiveRecord, вы должны иметь возможность сделать следующее в консоли rails:

> Account.all.count
=> 100
> Account.where(:status=>'active')
=> [ #<Account id: 1, name: "a1", ...>, #<Account id: 2, name: "a2", ...>, #<Account id: 3, name: "a3", ...>, ...]

Я здесь много размахиваю руками, потому что не знаю твоей схемы. Замените условие where тем, что подходит для вашей ситуации. Возвращаемое значение должно выглядеть как массив со списком всех строк в базе данных, которые соответствуют условию. Кстати, массив - это список элементов, и проверка (как и отображение по умолчанию в консоли) показывает элемент, разделенный запятыми. Я не использовал debug, поэтому я не могу комментировать, что он должен делать.

Вы можете проверить, что возвращаемое значение является AREL и должно быть в состоянии выполнить некоторые другие операции, чтобы проверить, что все работает должным образом.

> Account.where(:status=>'active').class
=> ActiveRecord::Relation
> Account.where(:status=>'active').size
=> 99
> Account.where(:status=>'active').count
=> 99
> Account.where(:status=>'active').limit(10).count
=> 10

Если они работают так, как и ожидалось в консоли, в представлении может быть что-то, что скрывает правильное поведение. В этом случае вам нужно будет опубликовать детали вашего кода просмотра. Если в консоли все еще происходит странное поведение, я бы предложил опубликовать минимальные части фактического кода модели, которые все еще демонстрируют проблему, вместе с миграцией, чтобы мы могли видеть схему.

0 голосов
/ 11 марта 2011

Я думаю, что у вас есть проблемы в состоянии.Можете ли вы показать значение атрибутов, используемых в предложении where.Для меня это нормально работает:

 data = Account.where('id != 0').limit(10)
 data_count = data.count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...