gpt4 book ai didi

ruby-on-rails - 从 Ruby 映射中删除值

转载 作者:数据小太阳 更新时间:2023-10-29 09:02:18 25 4
gpt4 key购买 nike

我在 Rails 控制台中有一个看起来像这样的对象:

  pry(#<User>)> favorite_foods
=> [#<FavoriteFood id: 3, food_id: 1, user_id: 1, removed: false, created_at: "2015-09-06 00:49:35", updated_at: "2015-09-06 00:49:35">,
#<FavoriteFood id: 4, food_id: 2, user_id: 1, removed: true, created_at: "2015-09-06 12:16:56", updated_at: "2015-09-06 12:17:36">]

favorite_foods 与食物具有多态关系。

has_many :favorite_foods
has_many :favorites, through: :favorite_foods, source: :food
has_many :foods, through: :favorite_foods

在 favorite_food.rb 模型中,我使用以下方法设置最喜欢的食物:

 def favorited_foods
favorite_foods.map(&:food_id).to_set
end

我需要能够删除 favorite_foods 的所有实例,其中字段“removed”等于 true。

例如:在上面的控制台 session 中,我希望 favorite_foods 包含 food_id 3,而不是 food_id 4。

在 favorited_foods 方法中执行此操作的干净方法是什么?我尝试合并 .reject 但它忽略了它。

感谢您的任何建议!

最佳答案

你可以简单地做:

FavoriteFood.where(removed: true).delete_all

这将删除所有 FavoriteFood 记录,其中 removed 为 true

如果你想用 map 来做,那么你可以这样做:

favorited_foods.select { |f| f.removed == true }.map { |f| f.delete }

但不推荐这样做,因为它会为每条记录调用一次delete 方法。更好的方法是使用 delete_all 全部删除它们如上所示。

关于ruby-on-rails - 从 Ruby 映射中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32423842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com