如何使嵌套属性在Rails 3中起作用?

时间:2010-12-24 11:09:23

标签: ruby-on-rails forms ruby-on-rails-3 nested-attributes

这是我的用户模型:

class User < ActiveRecord::Base
  has_one :teacher, :dependent => :destroy
  accepts_nested_attributes_for :teacher, :allow_destroy => true
  attr_accessible :email, :password, :password_confirmation, :remember_me, :teacher_attributes
end

这是我的老师模特:

class Teacher < ActiveRecord::Base
  belongs_to :user
  attr_accessible :user_id, :first_name, :last_name
  validates_presence_of :user_id, :first_name, :last_name
end

这是我的表格:

<%= form_for(@user, :url => registration_path(:user)) do |user| %>


        <%= user.text_field :email %>
        <%= user.text_field :password %>
        <%= user.text_field :password_confirmation %>


    <%= user.fields_for resource.build_teacher do |t| %>
            <%= t.text_field :first_name %>
            <%= t.text_field :last_name %>
            <%= t.text_field :phone %>
    <% end %>

      <%= user.submit 'Confirm' %>
<% end %>

除了这件事不会“接受嵌套属性” 我的开发日志说:

WARNING: Can't mass-assign protected attributes: teacher

我不知道它是否相关,但表单不是在teacher_attributes数组中生成字段或任何东西 - 它在教师内部。我猜这就是我的问题所在,但我不知道如何把它放在里面。请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:3)

试试这些:

在视图顶部:

<% @user.build_teacher if @user.teacher.nil? %>

对于以下字段:

<%= user.fields_for :teacher do |t| %>

另外,就个人而言,我喜欢将表单中的块参数(部分|user||t|)命名为|form|(因为当你度过漫长的一天时,你会看到user在视图中而不是form,它可能会让您感到困惑!)