未使用fields_for保存的关联对象

时间:2011-12-28 10:14:32

标签: ruby-on-rails associations fields-for

我是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控制台时,我得到[]。我真的不知道我做错了什么,所以每个小小的提示都非常赞赏:)

1 个答案:

答案 0 :(得分:2)

由于您在考试模型中使用attr_accessible,我认为您必须在该列表中加入:examdates_attributes。否则,将不允许对嵌套模型进行质量分配。

class Exam < ActiveRecord::Base
  attr_accessible :title, :prof_id, :deadline, :examdates_attributes
  ...