0

我想像这样使用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

上面的代码显然不起作用,因为我没有将p1p2参数传递给我的命名范围。

我不知道如何将参数传递给命名范围。

4

2 回答 2

1

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

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

对 scope_procedure 的一项建议:

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
于 2010-05-01T18:44:44.777 回答
0

我能够使它与一个参数一起工作,如下所示:

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
于 2010-05-03T19:32:36.773 回答