0

我有一个需要运行的 rake 任务,以便清理(删除正斜杠)数据库中的一些数据。这是任务:

namespace :db do
  desc "Remove slashes from old-style URLs"
  task :substitute_slashes => :environment do
    puts "Starting"
    contents = Content.all
    contents.each do |c|
      if c.permalink != nil
        c.permalink.gsub!("/","")
        c.save!
      end
    end
    puts "Finished"    
  end
end

这让我可以跑步rake db:substitute_slashes --trace

如果我puts c.permalink在 gsub 之后做!我可以看到它正在正确设置属性。不过救命!似乎没有工作,因为数据没有改变。有人可以发现问题可能是什么吗?

另一件事,我安装了回形针,这个任务正在触发[paperclip] Saving attachments.,我宁愿避免。

4

2 回答 2

2

试试这个:

namespace :db do
  desc "Remove slashes from old-style URLs"
  task :substitute_slashes => :environment do
    puts "Starting"
    contents = Content.all
    contents.each do |c|
      unless c.permalink.nil?
        c.permalink = c.permalink.gsub(/\//,'')
        c.save!
      end
    end
    puts "Finished"    
  end
end

1.) 将 != nil 更改为除非 record.item.nil?(我不知道它是否有所不同,但我从未使用过!= nil。您可能想使用 .blank?也从您的代码判断)

2.) 您的 gsub 格式错误。模式必须在两个 / (/ stuff /) 之间。\ 是必要的,因为您需要转义 /。

3.) Bang (!) 更新对象。我认为您最大的问题可能是您过度使用!

4.) 你也让这变得非常低效......你正在查看每条记录并更新每条记录。Rails 并不总是最好的选择。学习 SQL 并在一行中做到这一点:

"UPDATE contents SET permalink = replace(permalink, '/', '');"

如果你必须使用 Rails:

ActiveRecord::Base.connection.execute "UPDATE contents SET permalink = replace(permalink, '/', '');"

哇!一问。惊人的!:)

于 2010-12-29T01:51:03.857 回答
1

我会尝试的下一件事是

c.permalink = c.permalink.gsub("/","")

至于没有回调的保存,这个stackoverflow页面有一些建议。

于 2010-12-29T01:55:51.730 回答