0

私のモデルには次のようなスコープがあります。

scope :public, -> { another_scope.where(v_id: 1) }

テストでこのモデルをスタブすると、次のようになります。

model.stub(:test).and_return(test)

このスコープに値を渡すので、受け取ります

wrong number of arguments (1 for 0)

どうすればこれを回避できますか? それを次のように変更すると:

scope :public, ->(arg) { another_scope.where(v_id: 1) }

正常に動作しますが、arg は使用されません

ラムダexを使用しない場合にも問題なく動作します:

scope :public, another_scope.where(v_id: 1)
4

1 に答える 1

1

ラムダの代わりにProcを使用します。

scope :public, proc{ another_scope.where( v_id: 1 ) }

ラムダは、適切な量の引数を必要とする「厳密な」種類の proc です。

の方法として、「安定したラムダ」構文を維持したい場合のちょっとしたハックがあります (ただし、あまり読みにくく、ミニチュアのサウロンの目のように奇妙に邪魔に見えます)。

scope :public, ->(*){ another_scope.where( v_id: 1 ) }

def foo( *args ); endsplatは、引数が変数に取り込まれないことを除いて、 のようなメソッド シグネチャで使用する場合とまったく同じように機能します。

于 2013-05-14T13:30:19.760 に答える