Использование: включает с переменными и дальнейшие запросы - PullRequest
0 голосов
/ 18 января 2012

Вот запрос:

@projects = @user.projects.includes(:company => :workers)

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

Итак, сначала идут проекты, принадлежащие тегу urgent компании, затем elevated, а затем всем остальным.

Я думаю, что один из способов сделать это - определить @companies, а затем определить:

@urgent = @companies.tagged_with('urgent')
@elevated = @companies.tagged_with('elevated')
@others = @companies.tagged_with('urgent', 'elevated', :exclude => true)

# view:
@urgent.each do |u| ... end
@elevated.each do |e| ... end
@others.each do |o| ... end

1.Как я могу получить @companies в первую очередь?

Как вы можете собрать все компании вместе, когда первый запрос - это тот, который я показал вверху?@companies = @projects.collect{|p| p.company} создает массив без возможности поиска.

2.Есть ли более элегантный способ отображения проектов, чем три цикла?

1 Ответ

0 голосов
/ 18 января 2012

Не думаю, что вы можете сделать это, не используя 2 запроса.

@projects = @user.projects.includes(:company => :workers)
@companies = Company.find(@projects.collect(&:id))

Что касается рендеринга тегов, вы можете сделать:

ordered_tags = ['urgent', 'elevated']

ordered_tags.each do |tag|
  @companies.tagged_with(tag).each do |company|
    my_render_logic
  end
end

@companies.tagged_with(*ordered_tags, :exclude => true).each do |company|
  my_render_logic
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...