我是红宝石的新手。我已经用多种语言编写了代码,并且如果有很好的参考并且在逻辑上进行了解释,通常可以很快得到结果。我快要疯了。我已经在stackoverflow以及其他网站上查看了与此相关的所有可能问题。每个人都说使用.clone或.dub或冻结,甚至使用Marshal.load(Marshal.dump(arr))之类的东西,但这些都不起作用。
我只想要一个原始对象的副本,可以在运行时对其进行修改,而无需对数据库进行任何更改。
rails项目将一堆产品加载到一个对象中,然后将其注入到下拉列表中。假设它称为@products。客户端希望我删除某些条目,使其不显示在下拉列表中,但一定不能从数据库中删除它们。
例如,在php中,您只需将db对象加载到变量中,然后例如通过id删除不需要的对象,然后循环遍历生成的对象/数组,然后创建下拉列表。这不会改变数据库。
我很快意识到,Ruby并不是那样工作的,即使我使用.clone或.dup,它也会直接从数据库中删除内容。
假设我使用tempproducts = @products,并且执行tempproducts.delete(11)之类的操作,但我不希望系统也删除@products(11)。
这是编程的基本功能,为什么我不能搞清楚像这样简单的事情?
非常感谢任何可以帮助我解决这个问题的人,甚至发布了指向正确答案的链接!
答案 0 :(得分:3)
检出Array#select方法以过滤记录集合
例如,假设您的Product
模型有一个列shipping_category
,而您只想显示具有local
和zonal
装运类别的产品,那么它将看起来像
@product.select { |p| p.shipping_category == 'local' || shipping_category == 'zonal' }
理想情况下,应该使用https://guides.rubyonrails.org/active_record_querying.html根据数据库级别的某些条件使用Active Record的where
方法来过滤数据。