これはかなり複雑な問題の説明です。その一部を解析するのに少し苦労しています。例えば、「組み合わせが作成されたとき」など、実際に見るものがない場合です。(画像の保存とは何の関係があるのでしょうか? テンプレートは画像ですか?)
とはいえ... 最も簡単な方法は、検索をデータ タスクではなく 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 で検索することをお勧めします。