我目前正在处理嵌套模型表单。 我有一个主题模型。 该学科模型包含3种不同类型的课程 - 教程,讲座和实验室。
我能够使用https://github.com/ryanb/nested_form使用嵌套表单。 但我想修复它,以便在表单中只生成3个子表单(课程模型),并且它们的第一个字段(lesson_type字段)将自动填写并修复。
我不太确定如何在Rails上模拟这种情况。 这些是我到目前为止的代码。 对于我可以尝试的内容或指出我所犯的错误的任何建议将不胜感激。
这是表格。 现在我可以让表单在我的控制器上显示三次,但我不确定如何为字段生成不同的值。他们现在都在演讲。
<%= nested_form_for(@subject, :remote=>true) do |f| %>
<div class="field">
<%= f.label :subject_code %><br />
<%= f.text_field :subject_code %>
</div>
<%= f.fields_for :lessons do |lesson_form| %>
<%= lesson_form.label :lesson_type %><br/>
<%= lesson_form.text_field :lesson_type, :value=> "lecture"%><br/>
<%= lesson_form.label :name %><br/>
<%= lesson_form.text_field :name %><br/>
<%= lesson_form.fields_for :lesson_groups do |lesson_group_form| %>
<%= lesson_group_form.label :group_index %><br/>
<%= lesson_group_form.text_field :group_index %>
<%= lesson_group_form.link_to_remove "Remove this task" %>
<% end %>
<p><%= lesson_form.link_to_add "Add a lesson_group",:lesson_groups,:id=>"open-lesson"%></p>
<% end %>
<% end %>
这是控制器。创建将在索引页面上进行。
def index
@subjects = Subject.all
@subject = Subject.new
lecture = @subject.lessons.build
lecture.lesson_groups.build
lecture.destroy
tutorial = @subject.lessons.build
tutorial.lesson_groups.build
tutorial.destroy
laboratory = @subject.lessons.build
laboratory.lesson_groups.build
laboratory.destroy
respond_to do |format|
format.html # index.html.erb
format.json { render json: @subjects }
format.js
end
end
主题模型
class Subject < ActiveRecord::Base
attr_accessible :subject_code, :lessons_attributes
has_many :lessons, :dependent => :destroy
accepts_nested_attributes_for :lessons, :allow_destroy => :true, :reject_if => lambda { |a| a[:lesson_type].blank? }
end
和课程模型
class Lesson < ActiveRecord::Base
belongs_to :subject
attr_accessible :lesson_type, :name, :subject, :lesson_groups_attributes
has_many :lesson_groups, :dependent => :destroy
accepts_nested_attributes_for :lesson_groups, :allow_destroy => true
end
答案 0 :(得分:0)
好吧,我不确定这是否适用于Rails惯例,但我根据自己的需要开始工作。在主题模型中添加了以下行:基本上在模型中指定课程类型字段。
lecture = @subject.lessons.build
lecture.lesson_type = "lecture"
lecture.lesson_groups.build
lecture.destroy
tutorial = @subject.lessons.build
tutorial.lesson_type = "tutorial"
tutorial.lesson_groups.build
tutorial.destroy
laboratory = @subject.lessons.build
laboratory.lesson_type = "laboratory"
laboratory.lesson_groups.build
laboratory.destroy
为了使它们无法改变课程类型我只读了
<%= lesson_form.text_field :lesson_type, :readonly=>true%><br/>