我是 Ruby 和 Rails 的新手,一段代码给我带来了麻烦。代码如下
projects_controller.rb
def update
@project = Project.find(params[:id])
old=@project.department.split(";")
if @project.update_attributes(params[:project])
else
render('edit')
end
new=@project.department.split(";")
new.each { |new_each|
if (old.include?(new_each) == false)
@users = User.where(:code => new_each)
c=@users.first
c.projects = "#{c.projects};#{@project.id}"
c.save
end}
#Erroneous area
old.each { |old_each|
if (new.include?(old_each) == false)
@users = User.where(:code => old_each)
#c=@users.first
@users.first.projects.slice!(";#{@project.id}")
@users.save
end}
#End erroneous area
end
它应该@users.first.projects
在删除过时的项目 ID 后更新列,但事实并非如此。我尝试了两者slice!
,slice
而且gsub
,它们都没有奏效。我错过了什么吗?我需要一些库来使slice!
方法起作用吗?
编辑 1
#Erroneous area
old.each { |old_each|
if (new.include?(old_each) == false)
@users = User.where(:code => old_each)
c=@users.first
c.projects.slice!(";#{@project.id}")
c.save
end}
#End erroneous area
也不能正常工作。
编辑2:
#Erroneous area
old.each { |old_each|
if (new.include?(old_each) == false)
@users = User.where(:code => old_each)
c=@users.first
c.projects.slice!(";#{@project.id}")
puts c.projects
c.save
puts c.projects
end}
#End erroneous area
我更新了代码以获得几个 puts 命令。这些工作正常,我在控制台上得到了预期的结果。
这里唯一的问题c.projects
是没有被保存到users
模型中。