2009-12-01 1 views
0

나는 Rails에서 응용 프로그램을 만들고 학생용과 상장용 두 가지 모델을 생성했습니다.선택 상자 (RoR)로 작업

rails students 

script/generate scaffold student given_name:string middle_name:string family_name:string date_of_birth:date grade_point_average:decimal start_date:date 

script/generate scaffold award name:string year:integer student_id:integer 

각 학생은 많은 상을 가질 수 있습니다, 그래서 has_many 추가 : 학생 모델 상을. 또한 사용자가 새로운 상을 만들 수 있습니다보기에 선택 상자를 추가 :

<%= f.select :student_id, Student.find(:all).collect {|s| [s.name, s.id]} %> 

내 질문 : 나는 사용자에게 학생을 지정하지 않고 상을 만들 수있는 옵션을 제공하고 싶었다면, 내가 어떻게 수정할 것 그들이 이것을 할 수 있도록 선택 상자?

저는 Rails의 새로운 제품입니다. 감사!

답변

1

설명하는 것은 다 대 다 관계입니다. 당신이 한 것은 일대 다 관계에 불과합니다.

다 대다 관계에서 각 측면마다 많은 독립적 인 레코드를 정의하고 조인 테이블을 사용하여 링크를 서로 만듭니다.

일대 다 관계에서 한 쪽의 각 레코드는 독립적이지만 여러면의 각 레코드는 연결된 여러 레코드에 종속적입니다. 귀하의 질문에 따른

예 :

많은 많은에 : 각 학생이 많은 상을 가질 수 있지만 의미로 상에 연결 할 필요가 없습니다. 각상은 많은 학생들이 얻을 수 있지만, 의미가 있으려면 학생과 연결될 필요는 없습니다. StackOverflow의 배지는 이것의 완벽한 예입니다.

1 대 다수 : 각 학생은 많은 상을받을 수 있지만 의미가있는 상과 연결될 필요는 없습니다. 각상은 오직 한 명의 학생에게만 주어집니다. 많은 관계로 많은와의 관계를 설정하는 방법

:

  1. student_idaward_id 열이있는 awardings 테이블을 만들 수 있습니다.
  2. student_id 열을 보너스 테이블에서 제거하십시오.
  3. 관계의 ActiveRecord에 알립니다.

    class Student < ActiveRecord::Base 
        has_many :awardings 
        has_many :awards, :through => :awardings 
        ... 
    end 
    
    class Awarding < ActiveRecord::Base 
        belongs_to :student 
        belongs_to :award 
    end 
    
    class Award < ActiveRecord::Base 
        has_many :awardings 
        has_many :students, :through => :awardings 
    end 
    
  4. 업데이트 양식 변경 사항을 반영합니다.

    한 번에 여러 항목을 관리하려면 여러 개의 선택 상자 또는 일련의 확인란을 사용하십시오. 거기에 대해 많은 자습서가 있습니다. 이 Railscast episode은 오래되었지만 좋은 시작입니다.

P. 커뮤니티 위키 상자를 확인하지 않으면 답변을 얻을 확률이 더 높습니다. 커뮤니티 위키는 여러 사용자가 답변을 향상시킬 수있는 비 기술적 인 질문입니다.