0

サブジェクト モデルとレッスン モデルがあります。ネストされたモデル フォームを実装しました。

科目を作成した後、関連するレッスンが表示されていると思われるページに誘導しました。しかし、私はレッスンを見ることができません。

レッスンのデータが適切に保存されなかったと思います。たとえば、lesson.find_by_subject_id('1') を実行すると、'nil' が返されます。

ポリモーフィズムがレール上でどのように機能するかを理解しようとしています.誰かが私が間違っている場所を指摘するか、作成される属するクラスの値を渡す方法についてのガイダンスを教えていただければ幸いです.

対象モデル

attr_accessible :subjectCode, :lessons_attributes
has_many :lessons, :dependent => :destroy
accepts_nested_attributes_for :lessons, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true

レッスンモデル

attr_accessible :lessonName, :subject, :subject_id
belongs_to :subject

サブジェクト コントローラー

def new
3.times {@subject.lessons.build}
end

def create
  @subject = Subject.new(params[:subject])
  if @subject.save
    redirect_to @subject, :notice => "Successfully created subject."
  else
    render :action => 'new'
  end
end

<%= form_for @subject do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :subjectCode %><br />
    <%= f.text_field :subjectCode %>
  </p>

  <%= f.fields_for :lessons do |builder| %>
    <p>    
    <%= builder.label :lessonName %> <br/>
    <%= builder.text_area :lessonName, :rows=>3 %>
    </p>
  <% end %>
  <p><%= f.submit "Submit" %></p>
<% end %>

リソースをルーティングする : 被験者がリソースを実行する : レッスンが終了する

4

2 に答える 2

1

レッスンreject_ifには属性がないため、ラムダは常にレッスン属性を拒否しcontentます。したがって、基本的nil.blank?にどれが返されるかを評価していますtrue

おそらく、レッスン名が空白かどうかを確認したいですか? アラ:reject_if => lambda { |a| a[:lessonName].blank? }

于 2012-11-02T00:15:31.470 に答える
1

contentフォームにレッスンのフィールドがないためcontent、すべてのレッスンで空白になります。また、次のものも使用します。

:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true 

これにより、コンテンツが空白かどうかがチェックされ、サブジェクトはレッスンを保存しません。フォームにコンテンツ フィールドがないため、 subjectを作成するたびにコンテンツが空白になるため、これは問題です。ユーザーが後でレッスンのコンテンツを追加できる場合は、削除する と、レッスンは関連付けられた主題とともに保存されます。:reject_if:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true

于 2012-11-02T07:53:48.233 に答える