[Rails Girls 참가자에게 적합] scaffold가 열명(속성명)을 잘못 만들었을 때의 수정 절차
9512 단어 RailsGirlsRubyRails
개시하다
본고는 Rails Girls 응용 프로그램 자습서scaffold를 만들 때 열 이름 (속성 이름) 을 잘못 입력했을 때의 수정 절차를 소개합니다.
또한 오류가 발견된 시기에 따라 대처 방법이 달라지므로 어느 시기에 적합한지 충분히 유의해야 한다.
코치님이 옆에 계실 때 코치님과 함께 일하세요.
이 보도에서 구상한 잘못에 관하여
이 글에서 잘못된 입력
nameneme을 가설했다.# うっかりnameではなく、nemeと入力してしまった!
rails generate scaffold idea neme:string description:text picture:string
화면에도 "Neme"↓
대상 운영 환경
이 글은 아래의 환경에서 동작 확인을 진행하였다.
사례 0: 파일을 갑자기 변경할 수 없음
작업 중에 입력 오류를 발견하면 "큰일났다. 고쳐야 해!"라고 말한다.문건을 갑자기 수정할 수는 없다.
절차가 매우 섬세하다.
만약 황급히 파일을 수정하면 다른 파일과 데이터베이스 사이의 일치성을 얻지 못해 시스템 오류가 발생할 수 있다.
초보자에서 오류가 발생하면 더욱 혼란스러울 수 있으니 코드를 바로 수정하지 말고 다음 절차를 읽어보고 수정하세요.
사례1:scaffold 제작 후 즉시 의식한 상황(db:migrate가 실행되지 않은 상황)
터미널에서 다음 명령을 실행하면 이전에 만든 모든 scaffold 관련 파일을 삭제할 수 있습니다.
rails destroy scaffold idea
명령을 실행하면 다음과 같은 디스플레이가 출력됩니다.Running via Spring preloader in process 16335
invoke active_record
remove db/migrate/20180619000740_create_ideas.rb
remove app/models/idea.rb
invoke test_unit
remove test/models/idea_test.rb
remove test/fixtures/ideas.yml
invoke resource_route
route resources :ideas
invoke scaffold_controller
remove app/controllers/ideas_controller.rb
invoke erb
remove app/views/ideas
remove app/views/ideas/index.html.erb
remove app/views/ideas/edit.html.erb
remove app/views/ideas/show.html.erb
remove app/views/ideas/new.html.erb
remove app/views/ideas/_form.html.erb
invoke test_unit
remove test/controllers/ideas_controller_test.rb
remove test/system/ideas_test.rb
invoke helper
remove app/helpers/ideas_helper.rb
invoke test_unit
invoke jbuilder
remove app/views/ideas
remove app/views/ideas/index.json.jbuilder
remove app/views/ideas/show.json.jbuilder
remove app/views/ideas/_idea.json.jbuilder
invoke assets
invoke coffee
remove app/assets/javascripts/ideas.coffee
invoke scss
remove app/assets/stylesheets/ideas.scss
invoke scss
파일을 삭제한 후 scaffold를 다시 만듭니다.(다음에는 오류를 입력하지 마세요!)
rails generate scaffold idea name:string description:text picture:string
이후 일반적인 상황에 따라 rails db:migrate 이후의 작업을 진행하세요.사례 2: "3. 설계" 작업 도중 발견된 상황
엄밀히 말하면
rails db:migrate는 집행되었지만 app/models/idea.rb과app/views/ideas/_form.html.erb가 아직 변경되지 않은 상황이 바로 이 상황이다.먼저 터미널에서 다음 명령을 실행하여 데이터베이스 수정을 취소합니다.
rails db:rollback
명령을 실행하면 다음과 같은 디스플레이가 출력됩니다.== 20180619002035 CreateIdeas: reverting ======================================
-- drop_table(:ideas)
-> 0.0008s
== 20180619002035 CreateIdeas: reverted (0.0041s) =============================
그리고 scaffold 삭제를 실행합니다. (실행할 때의 출력 예시 생략)rails destroy scaffold idea
rails destroy scaffold에서 만든 파일(소스 코드)만 삭제하면 데이터베이스에 추가된 수정(표 작성 등)이 취소되지 않기 때문에 각각 rails db:rollback과rails destroy scaffold idea가 필요하다.또한, 실행
rails db:rollback에는 파일 마이그레이션db/migrate/20180619000740_create_ideas.rb 등이 필요합니다.따라서
rails db:rollback→rails destroy scaffold idea 순서에 따라 명령을 실행해야 한다rails destroy scaffold idea.이어서 터미널에서scaffold를 만들고 이전을 실행합니다.
rails generate scaffold idea name:string description:text picture:string
rails db:migrate
이렇게 수정하면 완성되었을 것이다.중간까지 하던 일을 다시 시작하세요.
팀 개발 시 고려 사항
Rails Girls 순서대로 개발할 때는 이 정도면 문제없지만, 이게 팀 개발이고 GiitHub으로 코드를 관리하면 후술한'상황3'의 대응이 바람직하다.
왜 그랬으면 좋겠어요?
GiitHub에 push가 있는 migration 파일은 쉽게 수정할 수 없습니다. - Qita
상황 3: "4. 사진 업로드 기능 추가" 이후 발견된 상황
이미
app/models/idea.rb과app/views/ideas/_form.html.erb를 변경한 경우는 이에 속한다.이런 경우 다음과 같은 대체적인 견해에 따라 다음과 같은 절차이다.
1. 열 이름을 변경하는 마이그레이션 수행
터미널에서 다음 명령을 실행합니다.
rails generate migration RenameNemeToNameInIdeas
rails generate migration (マイグレーション名) 새 마이그레이션 파일을 만들 수 있습니다.RenameNemeToNameInIdeas의 부분은 자유롭게 명명할 수 있다."Ideas의 Neme을 Name으로 이름 바꾸기"라는 뜻으로 "rename neme to name in ideas"라는 이름을 지었습니다.
위의 명령을 실행하면 다음 출력이 표시됩니다.
Running via Spring preloader in process 20053
invoke active_record
create db/migrate/20180619005208_rename_neme_to_name_in_ideas.rb
다음과 같이 텍스트 편집기에서 db/migrate/何らかの数字_rename_neme_to_name_in_ideas.rb를 엽니다.db/migrate/어떤 숫자rename_neme_to_name_in_ideas.rb
class RenameNemeToNameInIdeas < ActiveRecord::Migration[5.2]
def change
rename_column :ideas, :neme, :name
end
end
db/migrate/ 다음에 만든 파일을 마이그레이션 파일이라고 하는데 데이터베이스를 수정하는 데 사용됩니다.여기
rename_column :ideas, :neme, :name의 코드가 쓰여 있습니다.이것은'
ideas표의 neme열을 name의 명칭으로 바꾸자'는 뜻이다.파일을 저장한 후 터미널에서 파일의 내용을 이동합니다.
rails db:migrate
실행하면 다음 출력이 표시됩니다.== 20180619005208 RenameNemeToNameInIdeas: migrating ==========================
-- rename_column(:ideas, :neme, :name)
-> 0.0045s
== 20180619005208 RenameNemeToNameInIdeas: migrated (0.0046s) =================
이렇게 하면 데이터베이스에 있는 열의 이름을 수정할 수 있다.2. 소스 코드에서 잘못된 이름을 모두 정확한 이름으로 수정
다음은 원본 코드에서 잘못된 이름을 모두 정확한 이름으로 수정해야 합니다.
이 글은'neme'를'name'로 바꿨다.
또한 대문자와 소문자를 구분해야 하기 때문에'Neme'는 반드시'Name'으로 변경해야 한다.
터미널에서 다음 명령을 실행하면 원본 코드에서'neme '을 검색할 수 있습니다.
git add .
git grep neme
다음은 출력 예입니다.'파일 경로 (파일이 있는 곳): 검색된 코드가 존재하는 곳' 으로 검색 결과를 표시합니다.
app/controllers/ideas_controller.rb: params.require(:idea).permit(:neme, :description, :picture)
app/views/ideas/_form.html.erb: <%= form.label :neme %>
app/views/ideas/_form.html.erb: <%= form.text_field :neme %>
app/views/ideas/_idea.json.jbuilder:json.extract! idea, :id, :neme, :description, :picture, :created_at, :updated_at
app/views/ideas/index.html.erb: <td><%= idea.neme %></td>
app/views/ideas/show.html.erb: <%= @idea.neme %>
db/migrate/20180619004342_create_ideas.rb: t.string :neme
db/migrate/20180619005208_rename_neme_to_name_in_ideas.rb: rename_column :ideas, :neme, :name
test/controllers/ideas_controller_test.rb: post ideas_url, params: { idea: { description: @idea.description, neme: @idea.neme, picture: @idea.picture } }
test/controllers/ideas_controller_test.rb: patch idea_url(@idea), params: { idea: { description: @idea.description, neme: @idea.neme, picture: @idea.picture } }
test/fixtures/ideas.yml: neme: MyString
test/fixtures/ideas.yml: neme: MyString
test/system/ideas_test.rb: fill_in "Neme", with: @idea.neme
test/system/ideas_test.rb: fill_in "Neme", with: @idea.neme
검색 결과를 닫을 때 q를 입력합니다.같은 입력
git grep Neme도 대문자'Neme'를 검색해 보세요.app/views/ideas/index.html.erb: <th>Neme</th>
app/views/ideas/show.html.erb: <strong>Neme:</strong>
db/migrate/20180619005208_rename_neme_to_name_in_ideas.rb:class RenameNemeToNameInIdeas < ActiveRecord::Migration[5.2]
test/system/ideas_test.rb: fill_in "Neme", with: @idea.neme
test/system/ideas_test.rb: fill_in "Neme", with: @idea.neme
그리고 대상의 파일을 열고 하나하나'neme'와'Neme'를 수정하면 OK지만 주의사항이 있다.마이그레이션 파일만 특수 파일이므로 수정하지 마십시오.
위의 실시례에 따르면 다음 두 문건은 이번 대상에 속하지 않는다.
db/migrate/20180619004342_create_ideas.rb db/migrate/20180619005208_rename_neme_to_name_in_ideas.rb 3. 실제 작동 화면 정상 작동 확인
이런 상황에서 많은 문서가 동시에 수정되어 예상치 못한 곳에서 오류가 발생할 수 있다.
먼저 화면을 조작해서 프로그램이 정상적으로 작동하는지 확인하세요.
오류가 발생했을 때는 잘못된 내용을 꼼꼼히 확인하면서 원인을 찾아 수정해 주십시오.
(단, 잘못된 수정은 초보자에게는 어려울 수 있으니 가능하면 지도교사와 함께 하세요.)
총결산
따라서 본고는 Rails Girls 참가자가 scaffold를 제작할 때 열명(속성명)을 잘못 알았을 때의 수정 절차를 설명하고자 한다.
만약 조심하지 않아 입력이 틀렸다면 이 문장을 참고하여 냉정하게 처리해 주십시오.
Reference
이 문제에 관하여([Rails Girls 참가자에게 적합] scaffold가 열명(속성명)을 잘못 만들었을 때의 수정 절차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jnchito/items/ab17ed02c82f86077022텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)