我正在研究Rails应用程序,目前我有2个模型 - 主题和课程。 一个学科有三种不同类型的课程 - 讲座,教程和实验室。我建模的模型有3个has_one。Rails与同一模型的多个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个具有指示课程类型的默认字段的表单提供一些建议。
非常有帮助。在我的应用程序中缺少外键声明。 –