Почему я не могу сделать это в моем контроллере - PullRequest
0 голосов
/ 09 марта 2012
def search
  @location = Location.find(params[:location_id])
  start_date = DateTime.strptime(params[:start_date], "%m-%d-%Y")
  end_date = DateTime.strptime(params[:end_date], "%m-%d-%Y")
  @songs = @location.songs.find(:all, :conditions => {:play_date => start_date..end_date}).paginate(:page => params[:page], :per_page => 40)
  render 'show'
end

Вот моя ошибка

undefined method `paginate' for #<Array:0x007fb00e49e6c8>

все работает, если я удалю will_paginate, но мне это нужно ... есть идеи или есть лучший способ написать этот контроллер

Ответы [ 3 ]

3 голосов
/ 09 марта 2012

Попробуйте написать

@songs = @location.songs.where(:play_date => start_date..end_date).paginate(:page => params[:page], :per_page => 40)

Разница?where возвращает объект ActiveRelation, а find возвращает все соответствующие объекты в массиве.

Надеюсь, это поможет.

2 голосов
/ 13 октября 2012
NoMethodError: undefined method `paginate' for []:Array

Мой will_paninate работает отлично, но выше ошибка выскакивала после обновления до версии 3.0.0.

Добавить следующее требование решит проблему:

require 'will_paginate/array'

Проверьте этот пост для обратной совместимости will_paginate 3.0.

1 голос
/ 09 марта 2012

Документация will_paginate гласит, что объединение .paginate с .find - это не тот путь, потому что .find загрузит все из вашей БД до того, как .paginate сможет ограничить выборку.

...