8

레일스 애플리케이션에서 모델 변경 사항을 어떻게 마이 그 레이션 할 수 있습니까? 예를 들어, "rails g model Person name : string"명령을 사용하여 모델을 만들면 마이그레이션도 생성된다는 것을 알고 있습니다. 그러나이 단계가 끝나면 생성 된 모델 "Person"으로 이동하여 새 속성을 추가하면 나중에이 속성을 데이터베이스에 저장하기 위해 마이그레이션에 자동으로 추가됩니까? 아니면 잘못된 방향에서보고 있는데 속성을 이전에 추가 한 다음 모델에 추가해야합니까?Ruby on Rails : 모델의 변경 사항을 마이그레이션하는 방법은 무엇입니까?

감사

당신이 attr_accessor과 함께 새로운 속성을 추가하는 경우

답변

9

당신은 정말 모델에 속성을 "추가"수 없다, 당신이 할 그 마이그레이션 파일을 생성하고 실행하여 - 레일 수치를 데이터베이스에 어떤 열이 있는지에 따라 모델에 어떤 속성이 있는지 확인합니다. 그러나 은 대량 할당을 통해 업데이트 할 수 있도록하려는 경우 특성을 허용 목록에 추가하기 위해 모델에 줄을 추가해야합니다. 그렇기 때문에 activerecord 모델에서 종종 다음과 같은 행을 볼 수 있습니다.

attr_accessible :name 

하지만 속성을 추가 할 필요는 없으며 필수 항목은 아닙니다. DB를/마이그레이션/디렉토리에 마이그레이션 파일을 생성합니다

rails g migration AddAddressToPerson address:string 

:

실제로 첫째로 마이그레이션을 만들고, 모델에 새로운 속성을 추가합니다. ("AddXXXToYYY"및 "RemoveXXXFromYYY"형식은 레일스에서 ​​"모델 XXX에 새 열 추가 또는 제거"를 의미하는 것으로 이해되며 자세한 내용은 documentation 참조). 이 경우 문자열 인 address이라는 속성을 추가했지만 원하는대로 변경할 수 있습니다.

다음

실제로 데이터베이스를 업데이트하려면 rake로 마이그레이션을 실행해야합니다

rake db:migrate 

을 마지막으로, 당신은 그 속성에 대량를 지정할 수 attr_accessible에 인수 목록에 속성을 추가하려면 :

attr_accessible :name, :address 

그렇게해야합니다.

+0

FYI : 귀하의 '질량 할당'링크는 나를 404. – Niek

+0

주셔서 감사합니다. 링크가 제거되었습니다. –

2

, 당신은 마이그레이션에 아무것도 할 필요가 없지만, 변경 사항이 데이터베이스에 저장되지 않습니다.

변경 사항을 유지하려면 migration을 사용하여 모델에 속성을 추가해야합니다. 적절한 구조로 텍스트 파일을 만들 수 있습니다. 마이그레이션은 별거 아니지만, rails generate migration AddLastNameFieldToUsers과 같이 생성하는 것이 훨씬 쉽습니다. 이러한 파일의 내용은 다음과 같이 조정할 수 있습니다

class AddLastNameFieldToUsers< ActiveRecord::Migration 
    def change 
    add_column :users, :last_name, :string 
    end 
end 
0

모델에 특성을 직접 추가 할 필요가 없습니다. Rails (실제로 ActiveRecord)는 자동으로 그것을 추론합니다. 모델 클래스의 속성 목록의 경우 AR은 모델 이름의 복수 형식을 가진 테이블을 찾습니다 (모델이 Order 인 경우 orders 테이블의 속성을 찾습니다). 구성에 대한 CoC - 협약이라는 디자인 기능의 일부입니다.

속성을 추가해야하는 경우 다른 답변에서 언급 한 것처럼 해당 필드를 열에 추가하려면 마이그레이션을 만들어야합니다.