私は新しい Rails プロジェクトに取り組んでおり、このプロジェクトには製品と製品カテゴリがあります。
したがって、これらのカテゴリは、ボート、家、車などの名前を付けると、互いに大きく異なります。
車のカテゴリには、「時速」、「モデル」、「ブランド」、「年式」などの基準があります。家のカテゴリには、「部屋」、「年」、「都市」、「郵便番号」などがあります。
これを非常に動的にして、基準を追加/削除し、バックエンド パネルからカテゴリを追加/削除できるようにしたいと考えています。
今私の質問に、私はこれをいじっていましたが、この概念の論理を実際に理解することはできません.いくつかの解決策を試しましたが、それらは非常に奇妙で非常に非効率的です. 筋金入りの Rails コーダーが、このパズルの解き方についてヒントをくれるかもしれません。
だから私が思いつくことができる最善の解決策はこれでした:
4 つのモデル:
_______________________
| 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とGoogleの両方で、このような質問をかなり探しましたが、このようなものを見つけることができませんでした.
オルフ・ニールセン。