У меня есть именованная область, как это:
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, ...)
Итак, мой вопрос в том, как я могу превратить Array в список аргументов, разделенных запятой?
UPDATE0
От Мартин Фаулер Я узнал:
(Использование "*" в списке аргументов помогает в работе с переменными аргументами в ruby. В списке аргументов * диски указывают на vararg. Затем я могу обратиться ко всем дискам, переданным в виде массива с именем "диски". Если я вызываю другую функцию с помощью "* дисков", элементы массива дисков передаются как отдельные аргументы.)
Update1
Подробнее о операторе "splat" .