2013-05-14 1 views
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) } 

он отлично работает, но аргумент никогда не используется

Он также отлично работает, когда я не использую лямбда-ех:

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

ответ

1

Используйте Proc вместо лямбда.

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

лямбды являются «строгий» вид прок, которые требуют правильного количества аргументов.

Альтернативно, вот немного хак, если вы хотите сохранить синтаксис «Stabby лямбда» (хотя это не так читаемым, и выглядит странно тревожит меня, как миниатюрная Око Саурона):

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

Функция splat работает точно так же, как при использовании в сигнатурах методов, таких как def foo(*args); end, за исключением того, что аргументы не попадают в переменную.