我正在開發一個新的rails項目,並且在此項目中我有產品和產品類別。具有匹配產品的動態類別標準rails 3
所以這些類別是非常不同的彼此,一些名稱,船,房屋,汽車。
汽車類別可能有像「Mph」,「型號」,「品牌」,「年份」等標準。凡房屋類別將有像「房間」,「年」,「城市」,「郵政編碼」等。
我想這是非常動態的,這樣我就能夠添加/刪除標準並從後端面板添加/刪除類別。
現在對我的問題,我一直在玩這個,我不能真正弄清楚這個概念的邏輯,我嘗試了一些解決方案,但他們是非常奇怪的,相當低效。也許一些鐵桿鋼軌編碼器可以給我一個提示,關於如何解決這個難題?
所以最好的解決辦法,我能想出,是這樣的:
四種模式:
_______________________
| Product.rb |
-----------------------
| id | integer |
-----------------------
| category_id | integer |
-----------------------
| Title | string |
-----------------------
| Description | text |
-----------------------
_______________________
| Category.rb |
-----------------------
| id | integer |
-----------------------
| Title | string |
-----------------------
| Description | text |
-----------------------
_______________________
| Criteria.rb |
-----------------------
| id | integer |
-----------------------
| category_id | integer |
-----------------------
| Name | string |
-----------------------
| Default | string |
-----------------------
| Description | text |
-----------------------
_______________________
| ProductInfo.rb |
-----------------------
| id | integer |
-----------------------
| product_id | integer |
-----------------------
| Name | string |
-----------------------
| Value | text |
-----------------------
它是如何連接:
Criteria.rb is connected to Category.rb with a category_id and has_many/belongs_to relation
Product.rb is connected to Category.rb with a category_id and has_many/belongs_to relation
ProductInfo.rb is connected to Product.rb with a product_id and has_many/belongs_to relation.
Category.rb is the heart og this solution. The category model, both have many products and criterias.
如何它應該工作,在現實:
In the show category page, i would first print out all the criterias for the given category.
Afterwards i would make a @products.each do |product|.
In the @products.each block, i would make a @category.criterias.each do |criteria|.
In the @category.criterias.each block, i would then run something like product.productinfos.where(:name => criteria.name).
And then run it one by one.
結論,這個解決方案做的工作,但我懷疑,這是最好的解決辦法。它會產生非常大的加載時間,高流量和許多數據。我將需要編寫非常奇怪且不可讀的代碼。
這是一個相當長的問題,它可能會很混亂,所以如果有什麼請說。此外,我已經搜索了很多像這樣的問題,無論是在Stackoverflow和谷歌,但我一直沒能找到像這樣的東西。
Oluf Nielsen。