本文介绍了使用 accepts_nested_attributes_for 创建表单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有 2 个模型,一个用户和一个患者.一个用户有一个患者,一个患者 BELONGS_TO 一个用户.

I have 2 models, a User and Patient. A User HAS_ONE Patient and a Patient BELONGS_TO a User.

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
#

在我的患者控制器中,我正在尝试创建一个新的患者表单.

In my patients controller I am trying to create a new Patient form.

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

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

In My View (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 生成标记

The form shows up blank with a submit button with no generated markup for the user_fields

我被告知我这样做是错误的,因为患者有 accepts_nested_attributes_for :user 并且它应该是用户在我的系统中嵌套属性但我想使用资源模型,以便治疗患者和其他用户类型分开.

I have been told I am doing this wrong because of the patient having the accepts_nested_attributes_for :user and it should be the user nesting the attributes BUT in my system I want to use the resources model so a patient and other user types are treated separately.

示例数据库表:

用户:id|first_name|last_name...等

USERS: id|first_name|last_name...etc

患者:id|user_id|保险

PATIENTS: id|user_id|insurance

推荐答案

除非我弄错了,当您调用 fields_for 时,您没有 user.在您可以执行 fields_for 之前,您需要有一个可用于构建表单的用户实例,有点像您的 @patientpatient_form.

Unless I'm mistaken, you have no user when you are calling fields_for. Before you can do the fields_for, you will need to have an instance of a user that can be used to build the form, kind of like how you have @patient for your patient_form.

最好的办法是根据您的 @patient 在您的控制器中构建一个 User,然后您就可以在视图中访问它.

Your best bet would be to build a User in your controller, based off of your @patient, and then you will have access to that in the view.

这篇关于使用 accepts_nested_attributes_for 创建表单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 23:09