Создание формы с accepts_nested_attributes_for - PullRequest
3 голосов
/ 23 февраля 2011

У меня есть 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

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%>

Форма отображается пустой с кнопкой отправки без сгенерированной разметки для полей пользователя

Мне сказали, что я делаю это неправильно, потому что у пациента есть acceptpts_nested_attributes_for: user и это должен быть пользователь, вложивший атрибуты НО в моей системе. Я хочу использовать модель ресурсов, чтобы пациент и другие типы пользователей обрабатывались отдельно.

Пример таблицы базы данных:

USERS: id | first_name | last_name ... etc

ПАЦИЕНТЫ: id | user_id | страхование

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Если я не ошибаюсь, у вас нет user, когда вы звоните fields_for. Прежде чем вы сможете выполнить fields_for, вам понадобится экземпляр пользователя, который можно использовать для создания формы, например, как у вас есть @patient для вашего patient_form.

.

Лучше всего было бы построить User в вашем контроллере на основе вашего @patient, и тогда у вас будет доступ к этому в представлении.

1 голос
/ 23 февраля 2011

попробуйте <%= patient_form.fields_for со знаком равенства там? Я знаю, что какое-то время было предупреждение о том, что «помощники по блочному стилю устарели».

0 голосов
/ 24 февраля 2011

Ответы Джеффа Казимира и theIV верны, но вы должны сделать их оба. То есть, исправьте блок patient_form.fields_for для пользователя <%= и создайте объект User для пациента в контроллере, что-то вроде:

def new
  @patient = Patient.new
  @patient.user = User.new
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...