Предел не работает, как ожидалось в Rails3 - PullRequest
1 голос
/ 24 января 2011

В моем методе индекса контроллера практики есть следующий код:

@practices = @activity.practices.order('created_at DESC').limit(20)

К сожалению, вызов limit не работает, и @practices возвращает> 20 объектов. Я уверен, что это просто исправить, но я не уверен, что делаю неправильно. Я, кажется, использую этот метод в порядке, указанном в документах ..

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

UPDATE

SQL LOG:

Practice Load (1.6ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 9) ORDER BY practiced_on DESC, created_at DESC LIMIT 20

Однако, дальше по логу я нашел это:

   Rendered practices/_practice.html.erb (216.9ms)
  Activity Load (0.6ms)  SELECT "activities".* FROM "activities" WHERE ("activities".user_id = 1)
  Practice Load (0.8ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 8) ORDER BY practiced_on DESC
  CACHE (0.0ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 9) ORDER BY practiced_on DESC

Что заставляет меня думать, что частичное не принимает правильную коллекцию. Частичное называется так:

<%= render @activity.practices %>

Любой совет?

ТИА

1 Ответ

1 голос
/ 24 января 2011

Похоже, что вы правильно возвращаете свою ограниченную коллекцию и сохраняете ее в переменной экземпляра @practices.

Однако вы рендерите частичную часть с помощью @activity.practices, что приведет к отложенной загрузкеВся коллекция неограниченных практик, потому что эта коллекция еще не загружена в объект @activity.

Ответ

<%= render @practices %> должен работать.

Бонусный раунд

Наконец, если вы хотите что-то более «объектно-ориентированное», вы можете поместить свой «ограниченный» запрос в область видимости «Recent_practices», чтобы вы могли вызвать:

<%= render :partial => 'practices', :object => @activity.recent_practices %>

В приведенном выше примере в частичной переменной будет использоваться локальная переменная с именем 'Recent_practices', а не переменная экземпляра.

Подробнее о Области ActiveRecordздесь .

...