- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法改进 Rails 中的搜索逻辑。例如,目前如果我搜索“红色皮革”,则搜索会匹配红色或皮革。您如何改进搜索逻辑,以便如果我搜索“红色皮革”,我不会得到“红色狗”,而是说“红色皮革外套”。理想情况下,我想在没有 gem 的情况下做到这一点。我正在使用 MySQL 和 Rails 4。
这里是我的搜索功能的示例
if params[:search_term].present? && params[:search_term].length > 1
@candidates = @candidates.where("title like ?","%#{params[:search_term]}%")
end
更新
我搜索“黑猫”(我的数据库中没有黑猫),我得到了这些......
1m Single Bolster Black Velvet
1m Straight Back Black Velvet
70cm Straight Back Black Velvet
包含 cat 应该会否定这些结果......
最佳答案
您可以尝试按空格分割搜索词,并为每个搜索词调用 where 。在 Arel 中,这将继续使用 AND 添加过滤器到您的 sql...
假设您的模型称为 Candidate
query = Candidate
params[:search_term].split(' ').each do |term|
query = query.where('title like %?%', term)
end
# check it's worked
puts query.to_sql
result = query.all
这应该可以满足您的要求。 “红色皮革”应该找到“一件红色皮革外套”或“一件带红色口袋的皮革外套”
不过,作为编码实践的问题,这实际上应该是模型中的方法,而不是 Controller 中的方法。就像这样:
def Candidate.search(search_term)
query = Candidate
params[:search_term].split(' ').each do |term|
query = query.where('title like %?%', term)
end
result = query.all
end
然后在你的 Controller 中:
def search
@candidates = Candidate.search(params[:search_term])
end
这意味着您可以在其他地方使用该方法,例如,作为 rake 任务的一部分,或者在控制台中,如果您发现该方法有问题,或者想要改进您的搜索方法,这对于调试非常有用。
关于mysql - Rails 中的搜索逻辑,希望在没有 gem 的情况下使其更加精确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875522/
当我输入时: gem env 在我的 Windows 系统上,它会生成以下信息: RubyGems Environment: - RUBYGEMS VERSION: 1.3.5 - RUBY
我记得我用过 gem install rails安装 Rails,但今天当我想安装另一个 gem 时,输入 gem install ruby-recaptcha 它失败了,说: You don't h
我有一个要重命名的 gem 。它是published on RubyGems。我最担心的是人们想要更新它。 我看到了两条路,但是我真的很想听听重命名 gem 的人是如何做到的。 1.把旧的变成一个元包
$ gem install passenger Fetching: passenger-4.0.5.gem (100%) ERROR: While executing gem ... (Gem::F
我刚刚用 gem update mime-types 更新了 mime-types gem . gem list显示 mime-types (1.16)在更新之前。更新后gem list显示 mime
如果我构建了一个私有(private) gem(例如,在我的公司内部托管),然后我想在我正在构建的另一个 gem(不是应用程序!)中重用该 gem,我该怎么做? 我应该在哪里放置我的依赖项并告诉我的新
我正在编写一个具有多个 gem 依赖项的 gem,其中一个依赖于破坏新版本向后兼容性的 gem。这让我开始思考——我不希望我正在构建的 gem 变成“那个 gem”,让人们难以更新他们的应用程序。我也
我目前正在构建一个需要 mysql2 gem 的 RoR 项目。我成功安装了 gem 。因为它出现在我的 gem 列表中。 [root@vc2cmmka035538n simple_cms]# gem
我试图在 XP 上构建 capybara-webkit。我关注了this操作说明。它说要进行捆绑安装: $ cd ruby193\capybara-webkit $ bundle install
是否有可能为 Ruby 提供类似“本地”gem 存储库的东西? 我正在开发一个没有管理员权限的自定义 Linux 发行版。 Ruby 安装在机器上 (v.1.8.7),但显然没有安装“gem”或“bu
我是使用 gems 的新手,所以如果我的事实有误,请原谅我。 我想将 Bundler 从 v1.3.5 更新到最新版本 (v1.5.3),所以我尝试这样做: sudo gem install bund
如何使用 gem install 同时安装多个 gem,同时指定我想要的版本? 例子: gem install akami -v 1.2.0 --ignore-dependencies gem in
我正在尝试在 XP 上构建 capybara-webkit。我关注 this instruction .我说: 8) Clone latest version of capybara-webkit f
我正在尝试设置我自己的私有(private) gem 服务器,它应该为我的 gem 提供服务并显示 rdoc。正如我所读,默认的 gem 服务器应该能够做到这一点。由于我不希望除了我自己的所有 gem
假设我的 gem 是 VideoPlayer。文件夹结构是: VideoPlayer/ /bin vidplay.rb /lib VideoPlayer
如何避免 gem 清理特定错误。我在执行 gem 清理时看到以下错误。 Gem::InstallError: gem-wrappers 未安装在 GEM_HOME 中 gem cleanup Clea
我写了一个 gem elastic-beanstalk这将在 rails 项目文件结构中使用,以及在 rails 目录和文件不可用(无需解压缩等)的独立 CI 环境中使用。即正在运行的 Bamboo
运行“sudo gem list --local”和“gem list --local”给我不同的结果。我的 gem 路径设置为我的主文件夹,并且仅包含来自“gem list --local”的 ge
最初,我发布了 Stack Overflow 问题 Ruby on Rails gems... Re-open models (现已删除)。但我认为这个问题太令人困惑了……我会根据我的发现尝试提出不同
我使用 OS X El Capitan 10.11.6 首先,我在安装 pod 时遇到问题,按照本网站中的步骤进行操作后能够找到问题..终端拼出问题是我安装后的 ruby v 2.2.2当我尝试安
我是一名优秀的程序员,十分优秀!