gpt4 book ai didi

ruby-on-rails - Rails 数组没有像它应该的那样删除元素

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

我正在尝试为我的 Rails 应用程序中的 Post 模型实现标记功能。我目前正在研究允许用户添加逗号分隔的值列表的逻辑,然后我解析它们并为每个值创建一个 Tag 记录。

create 方法工作正常,但现在我正在尝试创建逻辑,以便当用户更新 Post 的标签时,它实际上会添加和删除任何已更新的标签。

我有以下逻辑,但我的数组 current_tag_names 似乎没有正确更新。

我正在尝试的场景是用户创建了一个带有标签“一”和“二”的帖子,然后更新帖子并添加标签“三”和“四”,但是在保存帖子时,它实际上删除了不应该的标签“一”和“二”。此行似乎无法正常工作 current_tag_names - [tag] 因为在执行它之后,current_tag_names 仍然包含 ["one", "two"]。

# Returns 2 tag objects with the names being "one", "two"
db_tags = Tag.where(:post_id => @post.id)

# current_tag_names = ['one', 'two']
current_tag_names = []

# Loop through the db_tags and put just the "name" into an array called current_tag_names
db_tags.each do |db_tag|
current_tag_names << db_tag.name
end


p "current_tag_names before loop = #{current_tag_names}" # Verify current_tag_names actually contains ["one", "two"]

tags.each do |tag|

if current_tag_names.include?(tag)
p "inside if before #{current_tag_names}"
current_tag_names - [tag] # The first time through the loop, this line should remove "one" so that current_tag_names only contains "two" RIGHT???
p "inside if after #{current_tag_names}"
else
Tag.create(:name => tag.strip, :post_id => @post.id)
end

end
p "current_tag_names after loop = #{current_tag_names}" # STILL CONTAINS ["one", "two"] here. WTF??
Tag.where(:name => current_tag_names).where(:post_id => @post.id).destroy_all

我使用的是 ruby​​ 2.0.0p247 和 rails 4.0.0。这是其中任何一个的错误还是我做错了什么?

最佳答案

您逻辑中的问题是您没有修改 current_tag_names。试试这个:

current_tag_names = current_tag_names - [tag]

关于ruby-on-rails - Rails 数组没有像它应该的那样删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22852889/

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