Rails 3.2 - accept_nested_attributes_for и view - форма не появляется - PullRequest
2 голосов
/ 13 марта 2012

У меня есть модели, Пользователь и Учитель .

Пользователь

class User < ActiveRecord::Base
  ...
  has_one :teacher
  accepts_nested_attributes_for :teacher
end

Учитель

class Teacher < ActiveRecord::Base
  attr_accessible :teacher_last_name
  belongs_to :user
  ...
end

У меня также есть форма в controllers / views / admins / new_teacher.hmtl.erb

<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
  <%= field_set_tag do %>
    <% f.fields_for :teacher do |builder| %>
      <div class="control-group">
        <%= builder.label :teacher_last_name, "Last name", :class => "control-label" %>
        <div class="controls">
          <%= builder.text_field %>
        </div>
      </div>
    <% end %>

    <%= f.submit "Create", :class => "btn btn-large btn-success" %>
<% end %>

Контроллер администратора

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

Итак, у меня есть 2 вопроса:

  1. Почему моя форма не отображается?
  2. Является ли <% = builder.text_field%> правильным?

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Я нашел решение. Это удивительно легко исправить. В fields_for вы должны использовать <% = вместо <%. </p>

В моем случае мой взгляд теперь выглядит так:

<%= form_for @user, :url => create_teacher_url, :html => {:class => "form-horizontal"} do |f| %>
  <%= field_set_tag do %>
        <%= f.fields_for :teacher do |builder| %>
      <div class="control-group">
        <%= builder.label :teacher_last_name, "Last name", :class => "control-label" %>
        <div class="controls">
          <%= builder.text_field :teacher_last_name %>
        </div>
      </div>

  <% end %> 
  <%= f.submit "Create", :class => "btn btn-large btn-success" %>
<% end %>
0 голосов
/ 13 марта 2012
  1. Вы создали новый teacher объект для формы? - Убедитесь, что у вас есть что-то вроде этого в вашем контроллере: @user.build_teacher
  2. Нет, вам нужно указать атрибут, который вы хотите использовать, builder.text_field :teacher_last_name
...