我是rails的新手,并且有一个问题,我的关联对象没有被保存。我想我做了所有该做的事情,我不明白为什么它不起作用。因此,提前感谢所有能帮助我更接近解决这个问题的人。这些是我的模型:
class Examdate < ActiveRecord::Base
belongs_to :exam
attr_accessible :date, :exam_id
end
class Exam < ActiveRecord::Base
attr_accessible :title, :prof_id, :deadline
belongs_to :prof
has_many :examdates, :dependent => :destroy
accepts_nested_attributes_for :examdates
end
在我的exams_controller
中,我有这个:
def new
@exam = Exam.new
3.times{@exam.examdates.build()}
end
def create
@exam = Exam.new(params[:exam])
respond_to do |format|
if @exam.save
....
现在在我看来,我有semantic_fields_for
方法,我也尝试了正常的fields_for
,得到了相同的结果:
<%= semantic_form_for @exam do |f| %>
<% if @exam.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@exam.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @exam.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.inputs do%>
<%= f.input :title%>
<%= f.input :prof%>
<%= f.input :deadline, :start_year => Time.now.year, :label => "Anmeldefrist"%>
<% end %>
<%= f.semantic_fields_for :examdates do |builder|%>
<%= render "examdates_fields", :f => builder %>
<% end %>
<%= f.buttons do %>
<%= f.commit_button "Speichern"%>
<% end %>
<% end %>
在局部是这样的,以后将被扩展为
<%= f.inputs :date%>
现在我得到了具有正确的三个日期字段的表单,并且我可以正确地保存Exam
本身。当我看params[:exam][:examdates_attributes]
时,日期在那里:
{"0"=>{"date(1i)"=>"2006", "date(2i)"=>"1", "date(3i)"=>"1"},
"1"=>{"date(1i)"=>"2006", "date(2i)"=>"1", "date(3i)"=>"1"},
"2"=>{"date(1i)"=>"2006", "date(2i)"=>"1", "date(3i)"=>"1"}}
但是当我把Exam.find(1).exdates
在我的rails控制台,我得到[]
。我真的不知道我做错了什么,所以每一个小提示都非常感谢:)
由于您在考试模型中使用attr_accessible
,我认为您必须将:examdates_attributes
包含在该列表中。否则,将不允许对嵌套模型进行大量分配。
class Exam < ActiveRecord::Base
attr_accessible :title, :prof_id, :deadline, :examdates_attributes
...