代码之家  ›  专栏  ›  技术社区  ›  GregK

在searchlogic中将参数传递给scope\u过程

  •  0
  • GregK  · 技术社区  · 14 年前

    我想用searchlogic的 scope_procedure 像这样的特征

    class MyModelObject < ActiveRecord::Base
       scope_procedure :my_scope_proc, lambda { |p1, p2| { :conditions => "p1 >= #{p1} AND p2 < #{p2}" }}
    end
    

    然后,我进行搜索:

    scope = MyModelObject.search(:my_scope_proc => true)
    scope.all
    

    上面的代码显然不起作用,因为我没有通过 p1 p2

    我不知道如何将参数传递给指定的作用域。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Aaron Qian    14 年前

    一个疯狂的猜测是(意思是,我没有检查!):

    scope = MyModelObject.search(:my_scope_proc => [p1, p2])
    scope.all
    

    class MyModelObject < ActiveRecord::Base
      scope_procedure :my_scope_proc, lambda { |p1, p2| { :conditions => ["p1 >= ? AND p2 < ?", p1, p2] }}
    end
    

    这会阻止SQL注入。

    class MyModelObject < ActiveRecord::Base
      scope_procedure :my_scope_proc, lambda { |p1, p2| p1_gte(p1).p2_lt(p2) }
    end
    
        2
  •  0
  •   GregK    14 年前

    我可以用一个参数使它工作如下:

    class MyModelObject < ActiveRecord::Base
      scope_procedure :my_scope_proc, lambda { |p| p1_gte(p[0]).p2_lt(p[1]) }
    end
    
    scope = MyModelObject.search(:my_scope_proc => [p1, p2])
    scope.all
    
    推荐文章