0

나는 클래스 명과 클래스 과목을 가지고있다. 지금은 전혀 연결되어 있지 않습니다. 사용자는 목록에서 주제를 선택하고 검사 할 수 있습니다. 이제 사용자가 제목에 할당 할 수 있도록하고 싶습니다. 따라서 사용자 클래스에는 제목을 저장할 수있는 목록이 필요합니다. ... 과목을 사람에게 매핑하는 표 ... (m to n)기존 클래스에 (나에 의해 쓰여진 클래스의) 객체리스트 추가하기

Ruby on Rails에 대한 경험이별로 없으며이를 시도 할 때 내 응용 프로그램을 파괴 할까봐 걱정됩니다. 지금까지 (sth. $ rails generate migration AddSubjectsToPersons과 같은) 명령이 있다는 것을 알았지 만, 그들이 모델이나 컨트롤러 클래스를 만지면 정확히 무엇을하는지 알 수는 없다. 예 - 인 경우 내가 전에 쓴 글을 삭제 했나요?, 아니라면 - 내 모델에 수업이라는 목록 (목록)을 추가하는 것만으로 충분합니까? 그러면 DB에 대한 연결이 자동으로 감지됩니까?

답변

0

rails generate migration CreatePersonsSubjects 명령을 사용하여 마이그레이션 파일을 생성했습니다. 이름은 알파벳 순서 (관습)로 정리됩니다. 이 명령의 결과는 데이터베이스 테이블을 변경하기 위해 코드를 입력 할 수있는 해골입니다. 이러한 작업은 되돌릴 수있는 "다운"부분에서

create_table :persons_subjects, :id => false do |t| 
     t.integer :person_id, :null => false 
     t.integer :subject_id, :null => false 
    end 

: 이는 "최대"부분에 갔다

drop_table :persons_subjects 
마지막으로

나는 사람 클래스에서 필드를 추가 (만에 그건 그렇고 사람 클래스도 마찬가지지만 비슷한 라인을 추가 할 수는 있습니다.) 이름도 대회입니다.

has_and_belongs_to_many :subjects 

대상자

뷰에서 다음과 같은 예를 들어 사용할 수 있습니다 명령이 지금 나를 위해 마이그레이션을 만들었습니다

<div>Courses taken: 
    <ul> 
    <% @person.subjects.each do |subject| %> 
     <li><%= link_to subject.name, subject, :class => 'action' %></li> 
    <% end %> 
    </ul> 
</div> 
1

스크립트는 rake db:migrate으로 데이터베이스를 실행할 때 데이터베이스를 조작하기위한 모든 명령을 포함하는 마이그레이션 파일을 만듭니다.
예를 들어, 테이블에 외래 키를 추가하고 마이그레이션을 실행하는 마이그레이션을 작성합니다. 그런 다음 모델로 이동하여 두 모델 (belongs_to, has_many) 사이에 올바른 active_record 참조를 넣습니다. 당신이

user = User.find(1) 
user.subjects 

같은 것을 콘솔 rails console을 확인하고 할 경우,이 단계를 수행 한 후 쿼리는 완벽한 작동합니다.
기본적으로 마이그레이션 생성 프로그램 스크립트는 데이터베이스를 조작합니다. 다른 모든 변경 사항은 모델의 코드를 변경해야합니다.

+0

하지만 파일은 거의 비어와 I가 있었다 것처럼 보인다 내 자신의 테이블 정의를 작성하십시오. 그러나 어떻게? 'create_table : users_lessons do t | t.references : person t.references : subject end'? http://guides.rubyonrails.org/migrations에서 그들은이 t가 무엇인지 설명하지 않습니다. : (그리고 그들은 "참조 도우미는 실제로 당신에게 외래 키 제약 조건을 생성하지 않습니다. 당신은 execute 또는 외래 키 지원을 추가하는 플러그인. "혼란 스럽네요. ( – chris

+0

마이그레이션 파일에서 몇 가지 규칙에 따라 테이블 정의를 수동으로 입력해야합니다. 예를 들어, 'add_column : users, : subject_id, : integer ', 이것은 테이블에 컬럼을 생성 할 것이므로,'active_record'는 쿼리를 성공적으로 만들 수 있습니다. – MurifoX