2013-05-28 3 views
0

Rails guide: http://guides.rubyonrails.org/active_record_querying.html говорит, что я могу использовать find_each для ограничения количества строк, возвращаемых ActiveRecord. В нем также говорится, что мне не нужно указывать начало и что по умолчанию используется ASC. В этом случае я бы не смог указать начало, так как индекс является идентификатором твиттера.no block данная ошибка

Это то, что у меня в контроллере, в методе индекс:

@user = User.find_each(:batch_size => 100) 

Но когда Rails пытается вынести мнение, я получаю следующее сообщение:

no block given (yield) 

Который говорит мне что Rails хочет, чтобы я предоставил блок (как в начальной и конечной точках).

Любые идеи?

+0

Если вы просто пытаетесь ограничить набор результатов, прочитайте этот раздел: http://guides.rubyonrails.org/active_record_querying.html#limit-and-offset –

+0

User.limit (xxx) будет работать, но это не был мой вопрос – EastsideDeveloper

+0

Что вы пытаетесь сделать точно? 'find_each' ожидает, что вы предоставите блок, который будет выполнен для каждого пользователя, которого он найдет. Что вы пытаетесь сохранить в '@ user'? –

ответ

0

От the docs

Урожайность каждой записи, найденной с помощью найти варианты. Находка выполняется с помощью find_in_batches с размером партии 1000 (или в соответствии с опцией: batch_size).

Я думаю, вы хотите использовать find_in_batches напрямую. find_each - как mooshed вместе find_in_batches и each. each ожидает блок. find_each говорит: «Найти экземпляры в блоках, соответствующих этим критериям, а затем вызвать блок, который я передаю каждому из них».

Кроме того, @user подразумевает, что вы ищете одного пользователя, но выбираете кратные партии. Это то, что вы хотите? Если это так, вы, вероятно, хотите простой find. Если вы хотите кратные, попробуйте @users = User.find_in_batches, а затем @users.each do |user| ... end на ваш взгляд.

+0

\ @user была опечатка. Это должно быть \ @users, поскольку я пытаюсь захватить блок пользователей. Я попробую это и сообщит, будет ли это работать – EastsideDeveloper

+0

У меня получилось такое же сообщение об ошибке, когда я это сделал: @users = Пользователь. find_in_batches (: batch_size => 100) – EastsideDeveloper

+1

Вы пытаетесь выполнить пакетную обработку или просмотр подкачки? Пересматривая документы, пакетная обработка будет полезна для чего-то вроде рейк-задачи для пакетного процесса через пользователей, но если вы пытаетесь просто сначала получите несколько пользователей, а затем еще раз на другой странице, вы должны использовать 'find' с': limit' и ': offset' – jxpx777

Смежные вопросы