0

我是红宝石新手。我用多种语言编写过代码,如果有很好的参考资料并且有逻辑地解释,通常会很快得到东西。我快疯了。我已经在 stackoverflow 以及其他网站上查看了与此相关的所有可能问题。每个人都说使用 .clone 或 .dub 或 freeze 甚至是 Marshal.load(Marshal.dump(arr)) 之类的东西,但这些都不起作用。

我只想要原始对象的副本,我可以在运行时对其进行修改,而无需对数据库进行任何更改。

rails 项目将一堆产品加载到一个对象中,然后将其注入到下拉列表中。假设它被称为@products。客户希望我从下拉列表中删除某些条目,但不能从数据库中删除它们。

例如,在 php 中,您只需将 db 对象加载到变量中,然后通过 id 删除您不想要的内容,然后遍历生成的对象/数组并创建下拉列表。这不会改变数据库。

我很快意识到,Ruby 不是那样工作的,它会直接从数据库中删除内容,即使我使用 .clone 或 .dup 也是如此。

假设我使用 tempproducts = @products,并且我做了类似 tempproducts.delete(11) 的事情,我不希望系统也去删除 @products(11)。

这是编程的一个基本功能,为什么我想不出做这么简单的事情呢?

非常感谢任何可以帮助我解决这个问题的人,甚至可以发布正确答案的链接!

4

1 回答 1

3

Checkout Array#select方法过滤记录集合

例如,假设您的Product模型有一列shipping_category,并且您只想显示带有localzonal运输类别的产品,那么它看起来像

@product.select { |p| p.shipping_category == 'local' || shipping_category == 'zonal' }

理想情况下,您应该使用https://guides.rubyonrails.org/active_record_querying.htmlwhere根据数据库级别的 Active Record使用方法的某些条件过滤数据。

于 2019-03-28T12:20:54.207 回答