AssociationTypeMismatch-Fehler in der Ruby on Rails-App

Ich habe Probleme mit meiner Ruby on Rails App. Ich habe zwei Modelle - "Patient" und "Adresse", ein Patient hat eine Adresse und eine Adresse gehört zu einem Patienten.

Patient.rb

class Patient < ActiveRecord::Base
  has_many :charge_slips
  has_one :address

  validates_presence_of :last_name
  validates_presence_of :first_name
  validates_presence_of :middle_name

end

Address.rb

class Address < ActiveRecord::Base
  belongs_to :patient
  validates_associated :patient
end

Patient-controller.rb

class PatientController < ApplicationController
  def index
    @title = "Outpatient Services - Patient"
    @today = Date.today.to_formatted_s(:long)
    @patients = Patient.find(:all)
  end

  def new
    @patient = Patient.new
    @address = Address.new
  end

  def create
    @patient = Patient.new(params[:patient])
    @patient.created_on = Date.today.to_formatted_s(:long)

    if @patient.save
      @address = Address.new(params[:address])
      @address.patient_id = @patient.id
      if @address.save
        redirect_to :action => 'index'
      else
        redirect_to :action => 'new'
      end
      redirect_to :action => 'index'
    else
      redirect_to :action => 'new'
    end
  end
end

new.html.rb

<%= content_tag('h3', 'Create New Patient') %>
<hr>
<% form_for @patient, :url => { :action => "create" } do |patient_form| -%>
    <%= error_messages_for :patient %>
    <%= patient_form.label :last_name, 'Last Name:' %> <%= patient_form.text_field :last_name, :size => 30 %><br>
    <%= patient_form.label :first_name, 'First Name:' %> <%= patient_form.text_field :first_name, :size => 30 %><br>
    <%= patient_form.label :middle_name, 'Middle Name:' %> <%= patient_form.text_field :middle_name, :size => 30 %><br>

    <fieldset>
        <legend>Patient's Permanent Address</legend>
        <%= error_messages_for :address %>
        <% patient_form.fields_for @address do |address_fields| -%>
            <%= address_fields.label :street_name, 'Street Name:' %> <%= address_fields.text_field :street_name %><br>
            <%= address_fields.label :barangay, 'Barangay:' %> <%= address_fields.text_field :barangay %><br>
            <%= address_fields.label :city_municipality, 'City/Municipality:' %> <%= address_fields.text_field :city_municipality %><br>
            <%= address_fields.label :country, 'Country:' %> <%= address_fields.text_field :country %><br>
            <%= address_fields.label :zip_cide, 'Zip Code:' %> <%= address_fields.text_field :zip_code %><br>
        <% end -%>
    </fieldset>

    <%= submit_tag "Add Patient" %>
<% end -%>

Jedes Mal, wenn ich einen neuen Patienten hinzufüge, wird ein Fehler ausgegeben. Hier ist ein Teil des Fehlers:

ActiveRecord::AssociationTypeMismatch in PatientController#create

Address(#31360520) expected, got HashWithIndifferentAccess(#23815500)

RAILS_ROOT: C:/www/Outpatient Application Trace | Framework Trace | Full Trace

C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/association_proxy.rb:263:in `raise_on_type_mismatch'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations/has_one_association.rb:52:in `replace'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/associations.rb:1246:in `address='
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:2740:in `send'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:2740:in `attributes='
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:2736:in `each'
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:2736:in `attributes='
C:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.3/lib/active_record/base.rb:2434:in `initialize'
C:/www/Outpatient/app/controllers/patient_controller.rb:14:in `new'
C:/www/Outpatient/app/controllers/patient_controller.rb:14:in `create'

Ich bin neu bei RoR und möchte die Sprache durch Übung lernen. Ich möchte wissen, was mit dem Code nicht stimmt. Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage