我需要运行一个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
如果我在gsub后做puts c.permalink
!我可以看到它正确设置属性。但是节省!似乎没有工作,因为数据没有改变。有人能发现问题所在吗?
另一件事,我安装了回形针,这个任务触发[paperclip] Saving attachments.
,我宁愿避免。
答案 0 :(得分: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 to除非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, '/', '');"
哇!一个查询。惊人! :)
答案 1 :(得分:1)