我有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 |保险
答案 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