Связанный объект не сохранен с fields_for

Я новичок в рельсах, и у меня проблема с тем, что мой связанный объект не сохраняется. Я думаю, что я сделал все так, как это должно быть сделано, и я не могу понять, почему это не работает. Так что заранее спасибо всем, кто может помочь мне немного приблизиться к решению этой проблемы. Это мои модели:

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, я получаю []. Я действительно понятия не имею, что я сделал не так, поэтому каждый маленький совет очень ценен :)


person Maike Hargens    schedule 28.12.2011    source источник
comment
Попробуйте указать, какую коллекцию использовать в полях fields_for: ‹%= f.semantic_fields_for :examdates, @exam.examdates do |builder| %›   -  person Syed Aslam    schedule 28.12.2011


Ответы (1)


Поскольку вы используете attr_accessible в своей модели Экзамен, я думаю, вам придется включить :examdates_attributes в этот список. В противном случае массовое присвоение вложенной модели будет запрещено.

class Exam < ActiveRecord::Base
  attr_accessible :title, :prof_id, :deadline, :examdates_attributes
  ...
person Steve Jorgensen    schedule 28.12.2011
comment
На самом деле это не имело бы значения! - person Syed Aslam; 28.12.2011
comment
Хорошо, не могли бы вы уточнить @syed-aslam? - person Steve Jorgensen; 28.12.2011
comment
Собственно, так оно и было :) Большое спасибо за такой быстрый ответ! - person Maike Hargens; 28.12.2011