group_by используя значение из другой модели - PullRequest
1 голос
/ 09 апреля 2011

Использование ROR 2.3.8

У меня есть это в cities_controller.rb:

@shops = Shop.published.search params[:keyword], {
      :conditions     => conditions,
      :star           => true,
      :group_by       => 'city_id',
      :group_function => :attr,
      :page           => params[:page]
    }.merge(:order => 'rating_average DESC')
@cities = @shops.collect { |shop| shopy.city }

Как я могу сказать Rails получить модель rating_average от City вместо модели Shop? Потому что модель магазина не имеет rating_average. Это на самом деле City модель, которая получает оценку.

Спасибо.

ОБНОВЛЕНИЕ

published именная область в Shop.rb

 sphinx_scope(:published) { 
  {:conditions => {:status => 'published'}}
}

Индексы в Shop.rb

  define_index do
    indexes city.name, :as => :name, :sortable => true
    indexes city.duration, :as => :duration
    indexes city.status, :as => :status
    #has city.budget, :as => :budget
    #has city(:created_at), :as => :created_at
    has city(:rating_average), :as => :rating_average
    has city_id
  end

ОБНОВЛЕНИЯ 2

class City < ActiveRecord::Base
  has_many :shops, :dependent => :destroy    
  ...
end

1 Ответ

0 голосов
/ 09 апреля 2011

Для достижения этого следует использовать объединения:

@shops = Shop.published.search params[:keyword], {
      :conditions     => conditions,
      :star           => true,
      :group_by       => :city_id,
      :group_function => :attr,
      :page           => params[:page]
    }.merge(:order => :rating_average,
            :sort_mode => :desc)

Вы также должны добавить cities. или shops. перед столбцами, чтобы указать столбец какой таблицы.

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