1

ユーザーが 4 つのオプションの任意の組み合わせを選択できるシステムを作成しています。

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

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

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

私の質問 :

この情報をバックエンドで分類して、ユーザーの要求によってプルできるようにする最善の方法は何ですか?

たとえば、色とテキスト、または色、テキスト、ロゴのテンプレートがあります。私の推測では、この 2 つを 1 つのファミリーにグループ化して、組み合わせが作成されると、クエリが各ファミリーを調べて一致する組み合わせを探します。true の場合、その特定のコンボ バリエーションが返されます。

あなたはそれを別の方法で行いますか?

ありがとう!

4

2 に答える 2

2

利用可能なカテゴリの数をハードコードするべきではありません (明日、別のカテゴリが必要になったらどうしますか?)

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

...

このアプローチの欠点は、対応表 (カテゴリと組み合わせ) が必要なことです。

于 2009-07-27T15:53:54.180 に答える
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 で検索することをお勧めします。

于 2009-07-27T15:55:01.433 に答える