레일즈 애플리케이션을 개발 중이고 현재 2 개의 모델 (과목 및 레슨)이 있습니다. 과목에는 강의, 튜토리얼 및 실험실이라는 3 가지 유형의 강의가 있습니다. 나는 레슨 모델에 has_one이 3 개 있도록 모델링했다.Rails multiple has_one 동일한 모델과의 관계
지금은 과목과 수업을 위해 중첩 된 양식을 만들려고하고 있지만 강의, 자습서 및 실험실을 저장하는 것은 항상 렌더링 된 첫 번째 형식이었습니다. 즉 강의, 튜토리얼 및 실험실에 대해 3 개의 중첩 된 양식을 별도로 보유하고 있지만 저장 된 강의, 자습서 및 실험실은 항상 처음 만들어진 것입니다. 제 코드에서는 강좌가 처음 작성되어 강습을 위해 입력 한 튜토리얼과 실험실의 특성을 따르게되었습니다.
내가 잘못 갔는지, 아니면 여러 개의 has_one 관계가이 경우에 작동하더라도 확실하지 않으므로 조언을 주시면 감사하겠습니다. 다음과 같이
관련 코드
은 다음과 같습니다제목 모델
class Subject < ActiveRecord::Base
has_one :lecture, :class_name => "Lesson"
has_one :laboratory,:class_name => "Lesson"
has_one :tutorial, :class_name => "Lesson"
accepts_nested_attributes_for :lecture
accepts_nested_attributes_for :laboratory
accepts_nested_attributes_for :tutorial
end
수업 모델
class Lesson < ActiveRecord::Base
belongs_to :subject
end
피사체와 교훈 중첩 된 형태
<%= form_for(@subject_list) do |f| %>
<div class="field">
<%= f.label :subject_code %><br />
<%= f.text_field :subject_code %>
</div>
<div>
<%= f.fields_for :lecture do |lecture| %>
<%= render "lecture_fields", :f => lecture %>
<% end %>
</div>
<div>
<%= f.fields_for :tutorial do |tutorial| %>
<%= render "tutorial_fields", :f => tutorial %>
<% end %>
</div>
<div>
<%= f.fields_for :laboratory do |laboratory| %>
<%= render "laboratory_fields", :f => laboratory %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
새를 주제 컨트롤러의 동작
def new
@subject = Subject.new
lecture = @subject.build_lecture
laboratory = @subject.build_laboratory
tutorial = @subject.build_tutorial
respond_to do |format|
format.html # new.html.erb
format.json { render json: @subject }
end
end
누군가 내가 잘못 갔는지 식별하는 데 도움이된다면 감사하겠습니다. 그러한 다중 관계를 만들지 않아야하는 경우, 실제로 레슨 유형을 나타내는 기본 필드가있는 3 개의 양식을 렌더링 할 수있는 방법에 대한 조언이 필요합니다. 그 작동하지만, 내 조언은 AR 상속을
class Lesson < ActiveRecord::Base
end
class LectureLesson < Lesson
belongs_to :subject
end
class LaboratyLesson < Lesson
belongs_to :subject
end
class TutorialLesson < Lesson
belongs_to :subject
end
class Subject
has_one :lecture_lesson
has_one :laboratory_lesson
has_one :tutorial_lesson
accepts_nested_attributes_for :lecture_lesson
accepts_nested_attributes_for :laboratory_lesson
accepts_nested_attributes_for :tutorial_lesson
end
을 사용하여 마이그레이션
class LessonsAndSubjects < ActiveRecord::Migration
def up
remove_column :subjects, :lesson_id
add_column :subjects, :lecture_lesson_id, :integer
add_column :subjects, :laboratory_lesson_id, :integer
add_column :subjects, :tutorial_lesson_id, :integer
add_column :lessons, :type, :string
add_index :subjects, :lecture_lesson_id
add_index :subjects, :laboratory_lesson_id
add_index :subjects, :tutorial_lesson_id
end
def down
remove_column :subjects, :lecture_lesson_id
remove_column :subjects, :laboratory_lesson_id
remove_column :subjects, :tutorial_lesson_id
remove_column :lessons, :type
add_column :subjects, :lesson_id, :integer
end
end
이 더 의미하고 당신이 중첩으로 발급 해결 할 수있는 경우
매우 도움이 추가 다음 있습니다. 내 앱에서 외래 키 선언이 누락되었습니다. –