2009-07-27 5 views
1

私は4つのオプションの任意の組み合わせを選択できるシステムを作成しています。イメージのカテゴリを保存するための最良のロジック

結果は正確な組み合わせに基づいて表示されます。

たとえば、ユーザーが色、テキスト、およびロゴを選択した場合。色、テキスト、ロゴを含む結果のみが返されます。

もう一方では、結果として最終的に返される「テンプレート」を作成しています。各テンプレートは、ユーザーがテンプレートに対応する組み合わせを選択したときに適切に戻ることができるように指定されます。

私の質問:

それがユーザーの要求によって引き出すことができるように、バックエンドでは、この情報を分類するための最良の方法は何ですか?

たとえば、色とテキスト、または色、テキスト、ロゴのテンプレートがあります。私の推測では、これらの2つを家族内で2つずつグループ化し、組み合わせが行われると、各家族が一致するコンボを検索します。 trueの場合、その特定のコンボバリアントが返されます。

どうやってやりますか?

ありがとうございます!

+0

は私にとってタグシステムのようです。 – palindrom

答えて

2

あなたは(あなたが他のカテゴリを必要とするものであれば明日?)利用可能なカテゴリの数をハードコーディングshoudn't

Combination 
    has_many :categories 
    belongs_to :template 

    def self.find_by_selected_categories(array_of_categories) 
    self.find(:first, :conditions => {:categories => array_of_categories}) 
    end 
end 

Template 
    has_many: combinations 
end 

を...

この方法の欠点は、あなたが対応していなければならないということですテーブル(カテゴリ - 組み合わせ)。

1

これはかなり複雑な問題の説明です。私はいくつかの問題を解析しています。本当のものが見えないときには、 "組み合わせがなされたとき"に見えます。

それは...私は、最も簡単なアプローチは、データタスクではなく、Railsタスクとして検索を処理することだと思います。ちょうどあなたがあなたのテンプレートモデルのために必要な属性はどんな設定:

# In the migration 
create_table templates do |t| 
    t.string :color # Set a validation for your hex codes, or whatever, in Rails 
    t.string :text 
    t.string :logo_file_name # These all assume you're using the Paperclip gem. 
    t.string :logo_content_type # (http://thoughtbot.com/projects/paperclip) 
    t.integer :logo_file_size # If you're tracking your logo attachment some other 
    t.datetime :logo_updated_at # way, do whatever's needed in that case. 
end 

はその後、モデルでは、さまざまなオプションのためのスコープ名前付きセット:

class Template < ActiveRecord::Base 
    has_attached_file :logo 

    named_scope :with_color, :conditions => {"color is not null"} 
    named_scope :with_text, :conditions => {"text is not null"} 
    named_scope :with_logo, :conditions => {"logo_file_name is not null"} 
    # You could add :without_ named scopes too, of course, if you needed them 
end 

は、その後、あなたは、単に何でも合うようにそれらを一緒に連鎖することができますユーザーが検索で確認したTemplate.with_color.with_text.with_logoと指定されたスコープフィルタリングの最後には何も残っています。

それは意味がありますか?名前付きスコープは、この種のものにとっては非常に便利です。あなたが以前にそれらに出くわしたことがないなら、あなたはそれらの上のGoogleにしたいかもしれません。

関連する問題