0

我是 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模型中。

4

0 回答 0