这是一个相当复杂的问题描述。在没有实物可看的情况下,我在解析其中的一些内容时遇到了一些麻烦——例如“当进行组合时”。(它与存储图像有什么关系?您的模板是图像吗?)
也就是说......我想说最简单的方法是将您的搜索作为 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
,您将获得在命名范围过滤结束时幸存的任何内容。
那有意义吗?命名范围对于这类事情非常方便——如果你以前没有遇到过它们,你可能想用谷歌搜索它们。