【问题标题】:Rails model - how to differentiate different typesRails 模型 - 如何区分不同类型
【发布时间】:2012-12-26 09:02:34
【问题描述】:

我目前正在处理嵌套模型表单。 我有一个主题模型。 该主题模型包含 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

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-on-rails-3.2


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2018-01-14
      • 2013-05-10
      • 2021-10-30
      • 2023-01-24
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多