2

我必须模型,用户老师

用户

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

所以,我有两个问题:

  1. 为什么我的表格没有出现?
  2. <%= builder.text_field %> 是否正确?
4

2 回答 2

3

我找到了解决方案。很容易修复。在 fields_for 中,您应该使用 <%= 而不是 <%。

就我而言,我的视图现在看起来像:

<%= 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 %>
于 2012-03-13T12:32:40.050 回答
0
  1. 您是否teacher为表单构建了一个新对象以供使用?- 确保你的控制器中有这样的东西:@user.build_teacher
  2. 不,您需要提供您要使用的属性,builder.text_field :teacher_last_name
于 2012-03-13T11:48:32.823 回答