0

我有一個主題模型和一個課程模型。 我實現了一個嵌套的模型表單。嵌套式模型。 Belongs_to class not displayed

創建主題後,我將它引導到一個頁面,據說它顯示了相關的課程。但是,我沒有看到教訓。

我相信教訓的數據沒有正確保存爲 當我做了一個例如lesson.find_by_subject_id('1'),我得到'零'作爲回報​​。

我想弄清楚多態性是如何在rails上工作的,如果有人能指出我出錯的地方,或者給我一些關於如何爲belongs_to類傳遞值創建的指導,我將不勝感激。

物體模型

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

路線 資源:主題做資源:課結束後

+0

你會得到任何錯誤,我們只是在沒有'subject_id'的情況下保存'lesson'?另外,你應該在你的'attr_accessible'裏面添加':lessons'。 –

回答

1

reject_if拉姆達將始終拒絕教訓屬性,因爲教訓沒有content屬性,所以你基本上評估nil.blank?將返回true

也許你想檢查課程名稱是否爲空? Ala :reject_if => lambda { |a| a[:lessonName].blank? }

+0

明白了,謝謝! –

1

您沒有表格上的content的字段,所以content在每個課程中都是空白的。並且您還使用:

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

這將檢查內容是否爲空白,主題將不保存課程。這是你的問題,因爲你沒有內容字段的形式,所以內容將空白每次創建主題時候,你使用:reject_if因此受到也救不了它的教訓。如果您以後用戶可以放入課程的內容,請刪除:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true,您的課程將與相關主題一起保存。

+0

感謝您的幫助。 –