попробуйте это:
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? (Я не знаю, изменится ли он, но я никогда не использовал! = Ноль. Вы можете использовать .blank? Также, судя по вашему коду)
2.) Ваш gsub был уродливым. Шаблон должен быть между двумя / (/ вещи /). \ Необходим, потому что вам нужно экранировать /.
3.) Удар (!) Обновляет объект на месте. Я думаю, что вашей самой большой проблемой может быть то, что вы злоупотребляете!
4.) Вы также делаете это очень неэффективным ... Вы просматриваете каждую запись и обновляете каждую запись. Rails не всегда лучший вариант. Изучай SQL и делай это в одну строку:
"UPDATE contents SET permalink = replace(permalink, '/', '');"
Если вы ДОЛЖНЫ использовать Rails:
ActiveRecord::Base.connection.execute "UPDATE contents SET permalink = replace(permalink, '/', '');"
Вау! Один запрос Удивительно! :)