Rails模型-如何区分不同的类型



我目前正在研究嵌套模型表单。我有一个主题模型。该学科模式有三种不同类型的课程——导师课、讲座和实验课。

我能够得到嵌套的形式与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

好的,我不确定这是否符合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/>

相关内容

  • 没有找到相关文章

最新更新