在Rails 3中按数组索引选择对象

3

我正在尝试使用ActiveRecord通过数组索引来选择一组对象。

我知道可以选择Item.first或Item.last,也可以单个选择或范围选择。但是我想根据它们在数组中位置的索引更新任意组对象。

collection = Item.all.to_a
collection[3,5,9,11]

这可行吗?

提前感谢...

-- 编辑 --

多亏了tokland的帮助,我成功地让它完美地运行了。

如果有其他人想要做类似的事情,这是我所做的:

yesterday = Time.now - 1.day
i = Item.all
new_items = i.values_at(1,3,5,10,11,14,18)
new_items.each{ |e| e.update_attributes(:published_at => yesterday) }
2个回答

8
如果您指的是数组中的索引(而不是ID):
collection.values_at(3, 5, 9, 11)

谢谢tokland,这个方法确实有效!我正在尝试更新集合中的属性以进行测试。这是最好的方法吗? - Adam
实际上,我认为我无法更新数组的属性。我想我需要使用each方法。我会继续努力的。再次感谢tokland! - Adam
谢谢tokland。我已经让它工作了,并在上面的编辑中提供了代码...(希望那是正确的地方) - Adam

1

如果我理解正确,您需要

Item.find([3,5,9,11])

这是如何根据ID查找记录的方法。但是,如果不存在某个ID,则该方法会抛出异常。

Item.find_all_by_id([3,5,9,11])

即使其中一些ID不存在,也可以正常工作。


谢谢WarHog,但我试图避免使用ID,因为这是用于测试数据库,它们将不断变化... - Adam
好的,我明白了,抱歉我误解了。那么@tokland的方法应该能帮到你。 - WarHog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接