2010-04-21 71 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