私はRailsアプリケーションに取り組んでおり、現在、サブジェクトとレッスンの2つのモデルがあります。科目には、講義、チュートリアル、実験の 3 種類のレッスンがあります。Lessonモデルにhas_oneが3つあるようにモデル化しました。
現在、科目とレッスン用にネストされたフォームを作成しようとしていますが、保存されているレクチャー、チュートリアル、ラボは常にレンダリングされた最初のフォームでした。つまり、レクチャー、チュートリアル、ラボ用に別々に 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 つのフォームを実際にレンダリングする方法についてアドバイスをお願いします。