8

저는 Ruby on Rails에 처음 접했고 모델의 데이터베이스 스키마를 편집 할 수있는 방법이 있는지 궁금합니다.명령 줄에서 레일 모델 편집

예를 들어, 내 응용 프로그램에서 구독자 모델을 가지고 - 내가 만든 방법은이

rails generate scaffold Subscriber email:string를 사용했다하지만 지금은 나뿐만 아니라 가입자 모델의 이름을합니다. 이 작업을 수행하는 쉬운 방법이 있습니까? 현재 컨트롤러와 뷰에 많은 코드를 넣었으므로 반드시 비계를 파괴하고 싶지는 않지만 모델을 수정하고 싶습니다. 사전에

감사합니다,

hwrd

P.S. Ruby on Rails 3를 사용 중입니다.

+1

읽기에 http : //guides.rubyonrails를 .org/active_record_migrations.html이 매우 유용합니다. – Hong

답변

12

ActiveRecord 모델은 ActiveRecord 모델이 나타내는 테이블을 검사합니다. 새 필드를 추가하기 위해 실제로 모델을 변경하지 않아도됩니다 (유효성 검사 등을 추가하지 않는 한).

rails g migration AddNameToSubscribers name:string 
rake db:migrate 

그런 다음 당신은 당신의 컨트롤러와 뷰에서 이름 필드를 참조 시작할 수 있습니다 : 당신이 원하는 무엇

는 최대 데이터베이스를 마이그레이션 한 다음 새 마이그레이션을하고있다.

(이 발전기 명령은 거의 마법 보일 수도 있지만, 레일 생성기는이 형식을 인식하고 적절한 add_columnremove_column 코드를 생성합니다 추가 읽기를위한 Rails migration guide를 참조하십시오.).

+1

그러나 DB의 이전 열은 여전히 ​​공간을 차지하지 않습니까? 나는이 방법을 보지 않았다. 그건 좋은 지적이야. – hwrdprkns

+0

@hwrdprkns : 예, 여전히 공간을 차지합니다. 네가 무엇을 요구하는지 모르겠다. 이 명령은'name' 필드를'subscribers' 테이블에 추가합니다. 그게 네가 원하는게 아니야? –

+1

이전 열이 삭제되지 않았으므로 여전히 열을 차지합니다. 위의 마이그레이션은 subscribers 테이블에 열만 추가하는 것입니다. – Zabba

2

모델의 데이터베이스 스키마를 변경하려는 경우 마이그레이션을 사용하는 것이 좋습니다. 당신은 단지 모델을 발견하고 각 인스턴스 내부의 데이터를 업데이트 의미하는 경우

당신은

add_column :city, :string 
remove_column :boo 

http://guides.rubyonrails.org/migrations.html

등의 작업을 수행 할 수 있습니다, @의 apneadiving의 대답과 함께 할 것입니다.

+0

답장을 보내 주셔서 감사합니다. 나는 데이터베이스 스키마를 변경하는 것을 의미합니다. 미안하지만 분명하지 않습니다. 이 명령을 실행하면 내 스키마가 제대로 업데이트됩니까? 또한, 단지 부작용으로 - remove_column도 해당 모델의 열에있는 모든/모든 데이터를 bash 할 수 있습니까? – hwrdprkns

+0

@hwrdprkns, 열이 테이블에서 제거되면 해당 테이블의 모든 데이터가 손실됩니다. 그리고 @ Jesse Wolgamott이 말한 것은 본질적으로 @Josh Lindsey가 말한 것과 같은 것입니다. – Zabba

+0

죄송합니다. 나는 이것을 내려 줬습니다. 나는 그런 뜻이 아니 었습니다! 답변을 편집하면 다시 투표 할 것입니다. – hwrdprkns