rails - meta_search не фильтрует результаты должным образом - PullRequest
2 голосов
/ 04 октября 2011

У меня есть модель продукта, модель категории и модель product_categorization (has_many ..., через ассоциацию).Я использую драгоценный камень meta_search для проведения поиска товаров.По какой-то причине, хотя мой журнал проверяет правильные критерии, он не фильтрует продукты по категории.Независимо от того, что я выбираю, он всегда отображает все продукты.

Контроллер продукта:

def update
params[:product][:category_ids] ||= []
@product = Product.find(params[:id])
if @product.update_attributes(params[:product])
 redirect_to @product
else
 render "edit"
end 

Форма поиска продукта:

  <div class="field">
   <%= f.label :category %>
   <%= f.collection_select :product_categorizations_category_id_equals_any, Category.all, :id, :name, :include_blank => true, :prompt => "Select a category" %> 
  </div>   

Любая помощь будет оценена.Кроме того, есть ли лучший камень, который я могу использовать?Я знаю, что searchlogic не совместим с rails 3, если вы не получите патч.Является ли исправленная версия searchlogic лучшим вариантом, чем meta_search?Благодарю.

ОБНОВЛЕНИЕ: РАЗРЕШЕНО:

Оооочень после многих часов размышлений над этим, я понял это.Я не уверен, что это объяснение, но после * удаления "any" из ": product_categorizations_category_id_equals_any" *, я заставил его работать.Я думаю, причина в том, что это has_many через ассоциацию, category_id не хранится в виде массива, поэтому «any» не имеет значения.Мое объяснение может быть полностью неверным, но оно работает.

1 Ответ

1 голос
/ 04 октября 2011

meta_search должен работать нормально для has_many через ассоциации (но также и habtm ). Например, у меня есть модель с множеством команд, где:

class User < ActiveRecord::Base
  has_many :users_teams, :class_name => 'UsersTeams', :dependent => :destroy
  has_many :teams, :through => :users_teams
end

Все из следующего все возвращаются правильноотфильтрованные результаты:

User.search :teams_id_equals=>999
User.search :users_teams_team_id_equals=>999
User.search :teams_id_equals_any=>[999]
User.search :users_teams_team_id_equals_any=>[999]

Я подозреваю, что вашей проблемой может быть не сам meta_search, а какая-то другая причина (например, параметры формы не были правильно получены и переданы для поиска, или ассоциации не определены правильно).

Предположим, что вы сначала проверили поиск на уровне модели (либо в консоли с запросами, подобными приведенным выше; но в идеале для этого в вашем проекте должен быть тест).Далее следует убедиться, что параметры правильно принимаются и передаются для поиска.

...