思维狮身人面像的动态领域

时间:2010-04-21 21:02:18

标签: ruby-on-rails ruby thinking-sphinx

我正在构建一个我有产品和类别的应用程序。类别has_many属性,每个属性都有一个可能的值列表。将类别设置为产品后,所有属性都显示在表单中,用户可以将该属性设置为属性可能值之一。

我的问题是:

Thinking Sphinx是否可以通过属性和属性值ex:

过滤产品
:with => {:property_id => property_value}

如果有可能,实施此方法的最佳方法是什么?如果没有,那还有其他库可以解决这个问题吗?

由于

/ Ola

3 个答案:

答案 0 :(得分:1)

一种方法是将property_id存储为多值属性。

class Product < ActivRecord::Base
  has_one :category
  has_many :properties, :through => :category

  KVP = "###"
  define_index do
    has properties("CONCAT(`properties`.`key`, \"%s\", `properties`.`value`)" %
           KVP, :as => :category_key_value
  end

  def search_with_properties keys, with_attr={}, p={}
    wp = (with_attr||{}).dup
    values = p.map{|k, v| "#{k}#{KVP}#{v}"} unless p.empty?
    wp = wp.merge({:category_key_value => values}) unless values.empty?
    search keys, :with => wp
  end
end

class Category < ActivRecord::Base
  belongs_to :product
  has_many :properties
end

class Property < ActivRecord::Base
  belongs_to :Category
  #key    E.g: region
  #value  E.g: South West
end

现在您可以发出以下搜索命令:

Product.search_with_properties("XYZ", nil, :region => "South West")

答案 1 :(得分:0)

试试这个:

将以下内容添加到define_index

has properties(:id), :as => :property_ids

然后您可以使用:with / :without,如:

:with => {:property_ids => property_value}

答案 2 :(得分:0)