복붙노트

[RUBY-ON-RAILS] 어떻게 프로젝트에 레일 컨트롤러와 모델 이름을 바꾸려면

RUBY-ON-RAILS

어떻게 프로젝트에 레일 컨트롤러와 모델 이름을 바꾸려면

나는 레일 응용 프로그램을 시작하고 모든 것이 잘 작동합니다. 그러나 지금, 나는 컨트롤러와 관련된 모델의 이름을 변경하고 싶습니다 :

나는 모델 상점에 군단 컨트롤러와 (최종들없이) 같은 변경을 원했습니다.

구글에 보면, 사람들은 파괴하고 다시 컨트롤러와 모델을 생성하기 위해 제안했다. 문제는 각 파일의 실제 코드를 삭제하는 것입니다!

모든 솔루션? 미리 감사드립니다.

해결법

  1. ==============================

    1.여기에 내가 무엇을 할 것이라고입니다 :

    여기에 내가 무엇을 할 것이라고입니다 :

    테이블 이름 (데이터베이스 레벨)을 변경하는 마이그레이션을 생성합니다. 나는 이전 테이블 군단이라고 가정합니다. 마이그레이션의 내용은 다음과 같습니다

    class RenameCorpsToStores < ActiveRecord::Migration
      def change
        rename_table :corps, :stores
      end
    end
    

    모델 파일 이름, 모델 클래스 정의 및 모델 연결을 변경 :

    컨트롤러의 파일 이름과 컨트롤러 클래스 정의를 변경 :

    보기 폴더의 이름을 바꿉니다. 매장 군단에서.

    군단 -> 자원 : 자원과 같은 설정 / routes.rb 파일의 경로에서 필요한 변경, 확인 저장, 저장에 있는지 모든 군단의 코드 변화에 대한 참조를 만들 (corps_path, ...)

    마이그레이션을 실행하는 것을 잊지 마십시오 :)

    이전 할 수없는 경우, dB / schema.rb을 삭제하고 실행하려고 :

     $ rake db:drop db:create db:migrate
    
  2. ==============================

    2.노비타의 대답 또한 당신은 유사 가게에 군단에 대한 테스트 및 헬퍼 클래스 정의 및 파일 이름을 변경해야합니다. 더 중요한 것은 당신은 당신의 설정 / routes.rb 파일에 저장 군단을 변경해야합니다

    노비타의 대답 또한 당신은 유사 가게에 군단에 대한 테스트 및 헬퍼 클래스 정의 및 파일 이름을 변경해야합니다. 더 중요한 것은 당신은 당신의 설정 / routes.rb 파일에 저장 군단을 변경해야합니다

    그래서 총 당신은 컨트롤러의 변경, 관련 모델, 뷰, 도우미, 테스트 및 경로 파일을 만들고 있어요.

    난 당신이 더 나은 옵션입니다 생성 파괴 및과 제안 무엇을 본 적이 생각합니다. 나는 여기에이 작업을 수행하는 방법에 대한 답변을 준 : 레일하십시오 controlller 이름을 변경하고 모델을 해당

  3. ==============================

    3.당신이있는 거 느낌 코드에서 모델에 다음 파일 이름과 참조에 변경 사항을 용감 경우 노비타의 대답에 나는 추가 (내가 충분히 담당자가 있다면 내가 댓글을 것이다), 어느 정도 자동화 할 수 있습니다. 예를 들어, 코드 사용할 수있는 참조를 변경하려면

    당신이있는 거 느낌 코드에서 모델에 다음 파일 이름과 참조에 변경 사항을 용감 경우 노비타의 대답에 나는 추가 (내가 충분히 담당자가 있다면 내가 댓글을 것이다), 어느 정도 자동화 할 수 있습니다. 예를 들어, 코드 사용할 수있는 참조를 변경하려면

    단수, 마이너스 및 mayus :

    grep -rl corp | xargs sed -i 's/corp/store/g'
    grep -rl Corp | xargs sed -i 's/Corp/Store/g'
    

    복수, 마이너스 및 mayus (복수 교체 단수 경우 마지막에 복수만을 요구와의 문자) :

    grep -rl corps | xargs sed -i 's/corps/stores/g'
    grep -rl Corps | xargs sed -i 's/Corps/Stores/g'
    

    이름 바꾸기 파일 :

    find . -name '*corp*' -exec bash -c 'mv $0 ${0/corp/store}' {} \;
    

    그리고 당신은 파일의 이름을 변경 도움이됩니다 (슬렉웨어 포함) 일부 * 괜찬아 맛에 이름 바꾸기라는 유틸리티가있다 :

    shopt -s globstar
    rename -v corps stores app/**/*corps* config/**/*corps* test/**/*corps*
    

    확인 이름 바꾸기는 당신이 우분투는 같은 이름의 다른 유틸리티와 함께 ​​제공되어야하는 것처럼 다른 분포를 알고 있었다, 그러나 생각하는 것입니다 (https://unix.stackexchange.com/questions/78621/find-rename-command- 참조 나던 작품). 우분투에 대신이 작업을 수행 할 것입니다 :

    shopt -s globstar
    rename -v 's/corps/stores/' app/**/*corps* config/**/*corps* test/**/*corps*
    

    아마 당신은이 디렉토리를 제외하고 수동으로 변경해야 할 수 있도록 참고하면 DB에있는 모든 파일의 이름을 변경하지 않도록 할 것을 / 당신의 seeds.rb 파일에 가능한 예외입니다.

  4. ==============================

    4.당신은 너무 레일 프로젝트 이름 변경 모델과 컨트롤러 같은 간단한 refactors위한 명령 줄 도구를 레일 리팩터링 보석을 시도 할 수 있습니다

    당신은 너무 레일 프로젝트 이름 변경 모델과 컨트롤러 같은 간단한 refactors위한 명령 줄 도구를 레일 리팩터링 보석을 시도 할 수 있습니다

    용법:

  5. ==============================

    5.또 다른 중요한 것은 당신이 수동으로 이름을 바꾸거나 파괴하고 (그들은 다른 모델에 존재하기 때문에) 자원을 생성 여부를 당신이해야 할 것이다 모델 협회를 업데이트 할 필요가 있다는 것입니다. 당신은 어느 코드에서 외래 키에 대한 모든 참조를 데이터베이스에서 외래 키의 열 이름을 변경하고 변경하는 마이그레이션을 실행할 수 있습니다 :

    또 다른 중요한 것은 당신이 수동으로 이름을 바꾸거나 파괴하고 (그들은 다른 모델에 존재하기 때문에) 자원을 생성 여부를 당신이해야 할 것이다 모델 협회를 업데이트 할 필요가 있다는 것입니다. 당신은 어느 코드에서 외래 키에 대한 모든 참조를 데이터베이스에서 외래 키의 열 이름을 변경하고 변경하는 마이그레이션을 실행할 수 있습니다 :

    rename_column :table, :old_id, :new_id
    

    기존의 외래 키를 사용하여 연결을 선언 할 때 또는 사용자 정의 외부 키를 설정합니다 :

    belongs_to :new, foreign_key: "old_id"
    

    자원이 이미지가 포함 또한, 그들은 종종 자원의 이름은 그들이 (파일 '/ 업로드 / 구 / 이미지에 존재하는 잘못을 참조 할 것 변경되면 (적어도 carrierwave와) 자원 이름 만 포함 된 디렉토리에 저장됩니다 / 1 / pic.jpg 업로드 / 새 / ... '하지만이에 대한보고있다' '당신이 업로드 다시 아마도 새 경로로 이동하거나, 이미지 것은 삭제 및 변경 중 하나를해야합니다, 그래서) 여기서 그들은' 다시 찾았다된다.

  6. ==============================

    6.당신이 모델 시험이있는 경우, 당신은 변경해야합니다 :

    당신이 모델 시험이있는 경우, 당신은 변경해야합니다 :

    파일 이름 바꾸기 : corp_test.rb -> store_test.rb (도 등 컨트롤러 테스트 통합 테스트 픽스처에 대한)

    store_test.rb의 코드 : 클래스 StoreTest에 대한 변경 클래스 CorpTest.

    그리고 컨트롤러, 모델, 통합, 고정 테스트에서 공사의 모든 참조.

  7. ==============================

    7.그냥이 고통스러운 과정을 완료한다는 사람으로 가장 중요한 단계는 가능한 한 많은 기능으로 확인하기에 충분한 TESTS을 구축하는 것입니다. 이름을 바꿀뿐만 아니라 다른 모든 모델 / 컨트롤러 / 뷰 부품 계획 것을 그들은 모델 / 컨트롤러뿐만 아니라 포함해야한다. 어쨌든 그것은 (어쩌면 심지어 필수) 좋은 방법입니다.

    그냥이 고통스러운 과정을 완료한다는 사람으로 가장 중요한 단계는 가능한 한 많은 기능으로 확인하기에 충분한 TESTS을 구축하는 것입니다. 이름을 바꿀뿐만 아니라 다른 모든 모델 / 컨트롤러 / 뷰 부품 계획 것을 그들은 모델 / 컨트롤러뿐만 아니라 포함해야한다. 어쨌든 그것은 (어쩌면 심지어 필수) 좋은 방법입니다.

    반복하여이 단계를 수행, 때로는 단계에 컴백 할 필요가 몇 번 (5 이상) 필요가 변경 될 수있는 추가 파일을 발견합니다. 그리고 지금 이름 바꾸기 단계에 대한 :

  8. ==============================

    8.컨트롤러에 대한 당신은 당신이 그것을 수동으로하고 있다면 장소를 다음으로 변경해야합니다 :

    컨트롤러에 대한 당신은 당신이 그것을 수동으로하고 있다면 장소를 다음으로 변경해야합니다 :

    모델, 노비타의 대답은 꽤 좋다

  9. from https://stackoverflow.com/questions/11924124/how-to-rename-rails-controller-and-model-in-a-project by cc-by-sa and MIT license