0

私は現在、ネストされたモデルフォームに取り組んでいます。サブジェクトモデルがあります。このサブジェクトモデルには、チュートリアル、講義、実験室の3種類のレッスンがあります。

ネストされたフォームをhttps://github.com/ryanb/nested_formで動作させることができます。ただし、フォームで子(レッスンモデル)のフォームが3つだけ生成され、最初のフィールド(lesson_typeフィールド)が自動的に入力されて修正されるように修正したいと思います。

Railsでこのような状況をモデル化する方法がよくわかりません。これらは私がこれまでに持っているコードです。私が何を試すことができるか、または私が犯した間違いを指摘することができるかについてのアドバイスをいただければ幸いです。

これがフォームです。現在、コントローラーにフォームを3回表示することはできましたが、フィールドにさまざまな値を生成する方法がわかりません。現在、全員が講演を行っています。

<%= 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
4

1 に答える 1

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/>
于 2012-12-26T10:43:12.597 に答える