0

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 に関する 1 つの提案:

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

次のように、1つのパラメーターで機能させることができました。

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 に答える