Rails Group_By Limit - PullRequest
       3

Rails Group_By Limit

3 голосов
/ 24 февраля 2012

Я следую этому уроку http://railscasts.com/episodes/29-group-by-month

и создали систему, позволяющую пользователю назначать контакт определенной метке. Однако мне нужно разбиение на страницы, чтобы оно возвращало только первые 3 метки, вторые 3 метки и т. Д.

Как мне это сделать в ActiveRecord

def index
    @connections = @current_user.user_contacts.where('label_id > 0').order("updated_at")
    @connections_label = @connections.group_by { |t| t.label_id }
end

Contact Table
ID | Name | Label_ID
01 | Mike | 1

Label Table
ID | Name
1  | PSU

ОБНОВЛЕНО

Ответы [ 4 ]

4 голосов
/ 06 марта 2012

Вы можете попробовать take

Что вы используете для нумерации страниц? Если вы хотите напечатать это в erb, это будет что-то вроде этого.

<%= @connections.group_by { |t| t.label_id }.take(3).each do |label, connections| %>
  <%= label.name %>
  <% connections.each do |connection|
    <%= connection.name %>
  <% end %>
<% end %>

Это даст вам первые 3 метки:

Label 1
 Mike
 ...

Label 2
 Bob
 ...

Label 3
 Jim
 ...

В вашем контроллере вы должны быть в состоянии, как @VVN предложил:

.take(3).offset((params[page] || 0) * 3)
3 голосов
/ 05 марта 2012

попробуйте использовать

@connections_label = @connections.group("label_id").limit(3).offset((params[page] || 0) * 3)

или вы можете

@connection_labels = @connections.user_contacts.group(:label_id).map(&:label).uniq

@labels_separated_by_3 = []
@connection_labels.each_with_index do |cl, index|
  @labels_separated_by_3[index / 3] ||= []
  @labels_separated_by_3[index / 3] << cl
end

и вы получите массив массивов с метками. как это:

1.9.2-p290 :033 > @connection_labels = ['a','a','a','b','b','b','c','c']
1.9.2-p290 :034 > @labels_separated_by_3 = []
 => [] 
1.9.2-p290 :035 > @connection_labels.each_with_index do |cl, index|
1.9.2-p290 :036 >     @labels_separated_by_3[index / 3] ||= []
1.9.2-p290 :037?>     @labels_separated_by_3[index / 3] << cl
1.9.2-p290 :038?> end
 => ["a", "a", "a", "b", "b", "b", "c", "c"] 
1.9.2-p290 :039 > @labels_separated_by_3
 => [["a", "a", "a"], ["b", "b", "b"], ["c", "c"]] 
1 голос
/ 29 февраля 2012

Я думаю, вы ищете методы limit и offset , верно?

@connections_label = @connections.group_by { |t| t.label_id }.limit(3).offset(3)
1 голос
/ 24 февраля 2012

Дайте мне знать, если я вас не правильно понимаю.То, что вы ищете, является ограничителем?Ограничение задач, возвращаемых тем, которые должны быть выполнены или созданы в течение последних 3 месяцев?

Примерно так:

@tasks = Task.where("created_at > ?", 3.months.ago)
@task_months = @tasks.group_by { |t| t.due_at.beginning_of_month }

Это то, что вы имеете в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...