2010-12-28 3 views
1

다른 Cms에서 변환 한 앱이 있습니다. 오래된 URL은과 같이 데이터베이스에 저장되고 있었다 :레일 - 데이터베이스의 데이터에서 슬래시 문자를 제거하는 방법은 무엇입니까?

/this-is-an-old-permalink/ 

그리고 나는 그들이 이렇게 될 필요

this-is-an-old-permalink 

주 앞으로의 부재 슬래시. 그들을 제거하는 가장 쉬운 방법은 무엇입니까?

정확한 코드가 필요하지 않습니다. (좋을지라도!) - Rails newb로 묻고 싶습니다. 다음과 같은 작업을 수행하는 가장 좋은 방법은 무엇입니까? ? 필자는 모델, 컨트롤러, 뷰를 설정하고 데이터를 출력 할 때 Rails와 실제로 만 작업했습니다. 이런 식으로 처리 할 필요가 없었습니다. 모델에 들어갈 수 있을까요? 어떤 도움을 주셔서 감사합니다!


편집

이 그들을 통해, 나는 모든 기록을 얻을 필요가 루프를 수행, 그 하나 개의 필드에 정규식 다음 저장합니까?

+0

모델 내의 항목을 처리하는 것은 일반적으로 Modelname.find_all do {block here}를 사용하여 수행됩니다. 이 경우 블록에는 모델의 각 인스턴스 (각 "행")에 대해 gsub 코드를 저장 한 다음 해당 인스턴스를 저장소에 다시 쓰게됩니다 (이 경우 데이터베이스의 행을 업데이트). –

답변

4

이 글은 한 번만 작성하기 때문에 lib 디렉토리에 스크립트를 작성하거나 마이그레이션을 작성하는 것이 가장 좋습니다. 나중에 이전 백업에서 복원하는 경우 rake db : migrate를 사용하여 자동으로 실행되므로 후자를 권장합니다. 그런 다음 대체 코드가 컨트롤러에 노출되지 않고 마이그레이션 중에 모든 표준 모델 처리 기법 (예 : 컨트롤러에서 사용하는 것처럼)을 사용할 수 있습니다.

편집 :

당신이라는 DB에 대한 새로운 레이크 작업을 생성 lib 디렉토리/작업에서 새 파일에 다음을 추가 할 수 있습니다 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 명령을 사용하여이 작업을 실행할 수 있습니다.

+0

저는 실제로 데이터 이전 (navicat 사용)을 수행하고 데이터를 데이터베이스에 한 번만 넣습니다. 이제 데이터베이스의 데이터가 슬래시로 채워져 있습니다. 그래서이 경우 lib에 스크립트를 작성한다고 말하고 있습니까? 그것은/lib/tasks에 있습니까? (기억해, 나는 완전한 새 단다) :-) – jyoseph

+0

나는 나의 대답을 더 많은 정보로 수정했다. 사용하는 정규 표현식은 슬래시가 이스케이프되는지 여부와 같은 데이터의 실제 구조에 따라 달라집니다. –

+0

+1 정말 대단합니다. 확실히 올바른 길로 나를 안내합니다. .find_all을 .all로 변경해야했습니다. - 내가 뭘 정규식 섹션에 퍼팅 시도 상관없이 원하는 결과를 얻지 못합니다. 그러나 이것은 확실히 좋은 지점에 나를 둔다. 감사! – jyoseph

관련 문제