Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有没有更好的方法来编写这个命名的范围?[轨道]_Ruby On Rails_Ruby_Idioms - Fatal编程技术网

Ruby on rails 有没有更好的方法来编写这个命名的范围?[轨道]

Ruby on rails 有没有更好的方法来编写这个命名的范围?[轨道],ruby-on-rails,ruby,idioms,Ruby On Rails,Ruby,Idioms,我使用这个命名范围来搜索描述与用户输入的任何单词匹配的产品 例如,产品说明\u like \u anychoc pret 将返回名称如下的产品 巧克力棒 巧克力椒盐卷饼 微型巧克力小马 这是我写的有效的命名范围 named_scope :description_like_any, (lambda do |query| return {} unless query conditions = [] values = [] for q in query.split(/\s+/)

我使用这个命名范围来搜索描述与用户输入的任何单词匹配的产品

例如,产品说明\u like \u anychoc pret

将返回名称如下的产品

巧克力棒 巧克力椒盐卷饼 微型巧克力小马 这是我写的有效的命名范围

named_scope :description_like_any, (lambda do |query|
  return {} unless query
  conditions = []
  values = []
  for q in query.split(/\s+/)
    conditions << "(`products`.description LIKE ?)"
    values << "%#{q}%"
  end
  { :conditions => [conditions.join(' AND '), *values] }
end)
控制器 意见
最讽刺的是不要自己写这封信使用优秀的gem,它将为您创建类似于任何范围的描述

编辑:如果您希望您的用户能够在这样的自由文本字段中输入搜索词,您可以定义自己的范围:

class Product < ActiveRecord::Base
   # ...
   scope_procedure :description_like_any_term, lambda { |terms| 
     name_like_any(terms.split(/\s+/))
   }
   # ...
end

最讽刺的是不要自己写这封信使用优秀的gem,它将为您创建类似于任何范围的描述

编辑:如果您希望您的用户能够在这样的自由文本字段中输入搜索词,您可以定义自己的范围:

class Product < ActiveRecord::Base
   # ...
   scope_procedure :description_like_any_term, lambda { |terms| 
     name_like_any(terms.split(/\s+/))
   }
   # ...
end

我使用的是searchlogic,但如果用户输入choc pret,我希望它搜索任何单词。如果我简单地使用,searchlogic将从产品中生成SELECT*,其中的描述类似于“%choc pret%”。我需要它从产品中选择*,其中的描述如“%choc%”或描述如“%pret%”。首先,这听起来像是一个全文搜索引擎的工作。如果您的描述太多和/或太长,可以选择Sphinx、Solr或mysql全文。否则,您可以这样做,但您需要解析用户的输入。类似于。。。参数[:search][:description\u like\u any]=参数[:search][:description\u like\u any].split/\s+/。。。在你真正调用Product.searchparams[:search]@Dave Pirotte之前,既然你很厉害,我猜你可能也有这个问题的答案当然,我只是在上面放了些东西。。。Rails 3/meta_search解决了这个问题,但AFAIK Searchlogic没有任何东西可以解决这个问题。我使用的是Searchlogic,但如果用户输入choc pret,我希望它搜索任何单词。如果我简单地使用,searchlogic将从产品中生成SELECT*,其中的描述类似于“%choc pret%”。我需要它从产品中选择*,其中的描述如“%choc%”或描述如“%pret%”。首先,这听起来像是一个全文搜索引擎的工作。如果您的描述太多和/或太长,可以选择Sphinx、Solr或mysql全文。否则,您可以这样做,但您需要解析用户的输入。类似于。。。参数[:search][:description\u like\u any]=参数[:search][:description\u like\u any].split/\s+/。。。在你真正调用Product.searchparams[:search]@Dave Pirotte之前,既然你很厉害,我猜你可能也有这个问题的答案当然,我只是在上面放了些东西。。。Rails 3/meta_搜索解决了这个问题,但AFAIK Searchlogic没有任何东西可以解决这个问题。
# app/views/products/index.html.erb
<% form_for @search do |f| %>
  <%= f.label :keywords, "Quick Search" %>
  <%= f.input :keywords %>
  <%= f.submit, "Go" %>
<% end %>
class Product < ActiveRecord::Base
   # ...
   scope_procedure :description_like_any_term, lambda { |terms| 
     name_like_any(terms.split(/\s+/))
   }
   # ...
end