我有一个主题模型和一个课程模型。 我实现了一个嵌套的模型表单。
创建主题后,我将其引导到一个页面,据此显示相关的课程。但是,我没有看到这些课程。
我认为课程数据没有得到正确保存 当我做了一个例如lesson.find_by_subject_id(' 1')时,我得到了#nil'作为回报。
我试图找出多态性如何在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 :(得分:1)
您的reject_if
lambda将始终拒绝课程属性,因为课程没有content
属性,因此您实际上正在评估nil.blank?
将返回true
< / p>
也许您想检查课程名称是否为空白? Ala :reject_if => lambda { |a| a[:lessonName].blank? }
答案 1 :(得分:1)
您在表单上没有content
课程的字段,因此content
每课都会为空。你也使用:
:reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
这将检查内容是否为空白,主题不会保存课程。这是您的问题,因为您在表单上没有内容字段,因此每次创建主题时内容都会为空,您使用{{1}所以主题不会保存它的课程。如果您以后用户可以放置课程内容,请删除:reject_if
,您的课程将与相关主题一起保存。