Rails - как вырезать символы косой черты из данных в базе данных? - PullRequest
1 голос
/ 28 декабря 2010

У меня есть приложение, которое я перевел из другой cms.Старые URL-адреса хранились в базе данных примерно так:

/this-is-an-old-permalink/

И мне нужно, чтобы они были такими:

this-is-an-old-permalink

Обратите внимание на отсутствие косых черт.Какой самый простой способ удалить их?

Я не обязательно ищу точный код для этого (хотя это было бы неплохо!) - я также спрашиваю как новичок в Rails: каков наилучший способ делать что-то?как это?Я действительно работал с Rails только над настройкой модели, контроллера, представлений и вывода данных.Я не должен был делать какую-либо обработку, как это.Будет ли это пойти в модели?Любая помощь приветствуется!


edit

Нужно ли мне получать все записи, проходить через них, выполнять регулярное выражение в этом одном поле и затем сохранять его?

1 Ответ

4 голосов
/ 28 декабря 2010

Поскольку вы, вероятно, будете писать это только один раз, лучше всего создать для него скрипт в lib или написать для него миграцию. Я рекомендую последний вариант, потому что он будет автоматически выполнен с помощью rake db: migrate, если вы позже восстановите из своей старой резервной копии. Затем вы можете использовать все ваши стандартные приемы обработки модели (как вы бы использовали на контроллере) в рамках миграции, не подвергая код замещения контроллеру.

EDIT:

Вы можете добавить следующее в новый файл в lib / tasks, чтобы создать новую задачу rake для этого db: substitute_slashes:

namespace :db do
  desc "Remove slashes from old-style URLs"
  task :substitute_slashes => :environment do
    Modelname.find(:all).each do |obj|
      obj.fieldname.gsub!(/regex here/,'')
      obj.save!
    end
  end
end

восклицательный знак в конце сохранения! означает, что он выдаст исключение, если результирующий объект не пройдёт валидацию, и в этом случае полезно проверить.

После этого вы сможете выполнить это с помощью команды rake db: substitute_slashes.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...