Rails 3 - сохранить несколько моделей, которые принадлежат друг другу по вложенным атрибутам - PullRequest
1 голос
/ 21 марта 2012

Я не могу понять, как это сделать. У меня есть модели Пользователь , Учитель , Учитель Образование . TeacherEducation принадлежит Teacher , Teacher принадлежит User . Я хотел бы сохранить User , Teacher и TeacherEducation в одну строку на user.save в моем контроллере. Это возможно? Если нет, то какой лучший способ сохранить это?

class User < ActiveRecord::Base
  attr_accessible ...,
                  :teacher_attributes
  has_one :teacher
  accepts_nested_attributes_for :teacher 
end

class Teacher < ActiveRecord::Base
  belongs_to :user 
  has_one :teacher_education
  accepts_nested_attributes_for :teacher_education
end

class TeacherEducation < ActiveRecord::Base
  belongs_to :teacher
end

Прямо сейчас без TeacherEducation у меня такой взгляд

<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
  <%= field_set_tag do %>
    <%= f.fields_for :teacher do |builder| %>
    # Fields of teacher
    <% end %>
    # Fields of user
<% end %>

Мой контроллер

class AdminsController < ApplicationController
  def new_teacher
    @user = User.new
    teacher = @user.build_teacher
    ...
  end

  def create_teacher   
    user = User.new( params[:user] )

    if user.save
    ...
    end
  end
end

1 Ответ

1 голос
/ 21 марта 2012

Это должно работать, я думаю ..

<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
  <%= field_set_tag do %>
    <%= f.fields_for :teacher do |builder| %>
      # Fields of teacher
      <%= builder.fields_for :teacher_education do |edu_fields| %>
        # Fields of teacher_education
      <% end %>
    <% end %>
    # Fields of user
<% end %>
...