1

MetaSearch 的便捷函数(例如 .not_in)在 Rails 3.0 和 3.1 的作用域调用内工作。

即使 MetaSearch 在范围之外工作,我也不得不将一些范围重写为“普通 Rails 3.2”而没有 MetaSearch 的便利。当我升级时,它破坏了我的几个应用程序和工具。

想法?我到处都在使用 MetaSearch。甚至写了一个自定义谓词。我希望仍然可能遗漏一些明显的东西。

在 Rails 3.2 上,在引擎内部工作以进行代码分离。当我试图隔离到没有命名空间/子文件夹或引擎的 Vanilla-Rails 时,这似乎并不重要。

注意——我刚刚为 :greater_than_days_ago 编写了我的第一个自定义“Where”谓词 :gt_da 所以 :created_gt_da = 7 将搜索创建的记录 >= 7.days.ago https://github.com/ernie/meta_search/wiki/Handy -开发和测试创建新的方式-%22Where%22-无需重新启动-您的服务器-每次

    class Bug < ActiveRecord::Base

      # MetaSearch
      search_methods :bug_active

      ## Rails 3.0 (and gems of that time) => 100%), 3.1 pretty sure
      ## Rails 3.2 error: "undefined method `not_in' for :resolution:Symbol"
      scope :bug_active, lambda {|checked| 
        where(:resolution.not_in => ['ERWITHPM','WONTFIX','WORKSFORME','DATAFIXDEPLOYED','PATCHDEPLOYED','RELEASEDEPLOYED','DUPLICATE','INVALID'] \
          , :bug_status.not_in => ['VERIFIED']  ) }

      ## Rewritten to work in Rails 3.2 without MetaSearch convenience inside of scope 
      ## ... a pinch more work which is why we love MetaSearch!
      scope :bug_active_why, lambda {|checked| 
           where("resolution not in (?)", ['ERWITHPM','WONTFIX','WORKSFORME','DATAFIXDEPLOYED','PATCHDEPLOYED','RELEASEDEPLOYED','DUPLICATE','INVALID'])
          .where("bug_status not in (?)", ['VERIFIED']  ) 
      }

    end          

    module Bugzilla
      class BugsController < ApplicationController

        @p = params[:search]

        ## MetaSearch works fine here on ":resolution_not_in" from form/search            
        @p[:resolution_not_in] = ['WONTFIX','WORKSFORME']

        @search = Bug
          .limit(50)
          .where("version like '2012_%p'")
          .search(@p)

      end
    end
4

0 回答 0