如何使用sunspot_rails gem为belongs_to关联编写可搜索的方法

时间:2012-04-05 03:14:06

标签: ruby-on-rails-3 full-text-search sunspot sunspot-rails sunspot-solr

我有两个型号。一个是品牌,另一个是product_detail。 brands表有id和name字段,product_details表有字段id,name,price,discount和brand_id。

品牌有很多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

当我运行rake sunspot:reindex

为nil类抛出一个错误的未定义方法映射

如果更改此代码

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

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

为product_detail类

抛出一个错误的未定义方法品牌

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

应该是

belongs_to :brand, :dependent=>:destroy

但是,如果您删除与之关联的product_detail,是否确定要删除该品牌?

在任何情况下,都可以将可搜索的块写为

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

我希望,这有帮助。