2

У меня есть две модели. один - бренд, а другой - product_detail. В таблицах брендов есть поля id и name, а в таблице product_details - идентификаторы полей, имя, цена, скидка и brand_id.Как написать метод поиска для bind_to с помощью sunspot_rails gem

бренд имеет много product_details и product_detail принадлежит бренд

brand.rb выглядит следующим образом:

class Brand < ActiveRecord::Base 
    has_many :product_details 
end 

и product_details.rb выглядит

class ProductDetail < ActiveRecord::Base 
    belongs_to :Brand, :dependent=>:destroy 
end 

пытаюсь сделать поиск с помощью солнечных пятен рельсы. Я хочу искать по имени и названию продукта с введенным пользователем текстом. Для этого я написал для поиска метод так:

class ProductDetail < ActiveRecord::Base 
    belongs_to :brands, :dependent=>:destroy 

    searchable do 
     text :name 
     text :brands do 
     brands.map(&:name) 
     end 
    end 
end 

Когда я запускаю грабли солнечных пятна: переиндексации

Он бросает ошибку неопределенной карту метода для нулевого класса

Если изменить код, как это

class ProductDetail < ActiveRecord::Base 
    belongs_to :Brand, :dependent=>:destroy 

    searchable do 
     text :name 
     text :Brand do 
     brands.map(&:name) 
     end 
    end 
end 

Он бросает ошибки неопределенных брендов метод для класса product_detail

Пожалуйста, помогите мне, как это сделать.

ответ

3

Это должно быть

belongs_to :brand, :dependent=>:destroy 

, но вы уверены, что хотите удалить бренд всякий раз, когда вы удаляете product_detail, связанный с ним?

В любом случае, для поиска блока, то следует записать в виде

searchable do 
    text :name 
    text :brand do 
    brand.name 
    end 
end 

Я надеюсь, что помогает.

+0

Нет, я не хочу удалять бренд при удалении продукта. Его ошибка, у меня была зависимость => уничтожить модель product_details, а не модель бренда. Я исправлю свою ошибку. –

+0

Спасибо. Моя проблема решена. –