Связанный объект не сохранен с fields_for - PullRequest
2 голосов
/ 28 декабря 2011

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

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

1 Ответ

2 голосов
/ 28 декабря 2011

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

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