Передача аргументов в scope_procedure в searchlogic - PullRequest
0 голосов
/ 30 апреля 2010

Я бы хотел использовать функцию scope_procedure для searchlogic

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 ]

1 голос
/ 01 мая 2010

Дикая догадка (значит, я не проверял!):

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
0 голосов
/ 03 мая 2010

Мне удалось заставить его работать с одним параметром следующим образом:

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
...