2010-04-21 60 views
0

我正在建立一个应用程序,我有产品和类别。类别has_many属性,每个属性都有一个可能值列表。将类别设置为产品后,所有属性都会显示在表单中,并且用户可以将该属性设置为其中一个属性可能的值。动态字段与思维狮身人面像

我的问题是:

是否有可能在思考狮身人面像,以通过属性和属性值ex过滤产品:

:with => {:property_id => property_value} 

如果这是可能的,什么是实现这一目标的最佳方式是什么?如果没有,那里是否有其他库来解决这个问题?

感谢

/奥拉

回答

0

试试这个:

以下内容添加到您的define_index

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

然后你可以使用:with/:without像:

:with => {:property_ids => property_value} 
+1

这是一个稍微复杂一些的是这一点。我需要过滤属性的值,而不是属性ID。 – 2010-04-22 07:39:58

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") 
+0

似乎我在思考狮身人面像索引时无法访问方法category_key_values。 '字段列表'中的未知列'ads.category_key_values' – 2010-04-22 07:26:41

+0

更新了我的答案,请看一看。 – 2010-05-03 16:21:10

相关问题