У меня есть именованная область видимости, подобная этой:
named_scope :by_items, lambda |*items| {
:joins => :items,
:conditions => ["items.id in (?)", items.map(&::id)]
}
Что означает *item
? Когда я звоню с Item.find(:first, ...)
, он работает нормально. Если я попытаюсь позвонить с использованием коллекции, Item.find(:all, ...)
произойдет сбой.
Из другого SO вопроса, я знаю, что подпись должна быть:
Order.by_items(item0, item1, ...)
Итак, мой вопрос на самом деле , как мне превратить массив в список аргументов через запятую?
UPDATE0
С Мартин Фаулер Я выучил:
(Использование «*» в списке аргументов помогает в работе с переменными аргументами в ruby. В списке аргументов * disk указывает vararg. Затем я могу ссылаться на все диски, переданные в виде массива с именем «дисков». Если я вызываю другую функцию с * дисками, то элементы массива дисков передаются как отдельные аргументы.)
Update1
Подробнее о операторе "splat" .