使用accepts_nested_attributes_for创建表单

时间:2011-02-23 16:48:10

标签: ruby-on-rails ruby-on-rails-3

我有2个型号,一个是用户和病人。用户HAS_ONE患者和患者BELONGS_TO用户。

class Patient < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
  attr_accessible :user_id, :user_attributes
end

# == Schema Information
#
# Table name: patients
#
#  id         :integer         not null, primary key
#  user_id    :integer
#  insurance  :string(255)
#  created_at :datetime
#  updated_at :datetime
#



class User < ActiveRecord::Base
  has_one :patient

  attr_accessible :username, :password, :active, :disabled, :first_name, :last_name, 
  :address_1, :address_2, :city, :state, :postcode, :phone, :cell, :email
  attr_accessor :password
end


# == Schema Information
#
# Table name: users
#
#  id                 :integer         not null, primary key
#  username           :string(255)
#  encrypted_password :string(255)
#  salt               :string(255)
#  active             :boolean
#  disabled           :boolean
#  last_login         :time
#  first_name         :string(255)
#  last_name          :string(255)
#  address_1          :string(255)
#  address_2          :string(255)
#  city               :string(255)
#  state              :string(255)
#  postcode           :string(255)
#  phone              :string(255)
#  cell               :string(255)
#  email              :string(255)
#  created_at         :datetime
#  updated_at         :datetime
#

在我的病人控制器中,我正在尝试创建一个新的患者表格。

class PatientsController < ApplicationController
  def new
    @patient = Patient.new
  end
end

在我的视图中(new.html.erb)

<%= form_for @patient do |patient_form| %>
<% patient_form.fields_for :user do |user_fields| %>
<table class="FormTable" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td class="label">
            <%= user_fields.label :username %> *:                       
        </td>
        <td class="input">
            <%= user_fields.text_field :username, :class=>"TextField" %>
        </td>
    </tr>
</table>
...
<%end%>
<%end%>

表单显示为空白,提交按钮没有为user_fields生成标记

我被告知我做错了,因为患者有accept_nested_attributes_for:用户,应该是用户在我的系统中嵌套属性BUT我想使用资源模型,以便患者和其他用户类型得到治疗分开。

示例数据库表:

USERS:id | first_name | last_name ... etc

患者:id | user_id |保险

3 个答案:

答案 0 :(得分:2)

除非我弄错了,否则当你打电话user时,你没有fields_for。在您执行fields_for之前,您需要拥有一个可用于构建表单的用户实例,就像您@patient patient_form的{​​{1}}一样。< / p>

您最好的选择是根据User在控制器中构建@patient,然后您就可以在视图中访问该内容。

答案 1 :(得分:1)

尝试使用等号的<%= patient_form.fields_for吗?我知道有一段关于“块状助手不推荐使用”的警告信息。

答案 2 :(得分:0)

Jeff Casimir和theIV的答案是正确的,但你需要同时做到这两点。即,将patient_form.fields_for块修复为用户<%=,并在控制器中为患者构建一个User对象,如:

def new
  @patient = Patient.new
  @patient.user = User.new
end