Rails 2.3.5 で has_one ポリモーフィック モデルで accept_nested_attributes_for を使用しています。モデルとその関連付けは次のとおりです。
class Address < ActiveRecord::Base
attr_accessible :city, :address1, :address2
belongs_to :addressable, :polymorphic => true
validates_presence_of :address1, :address2, :city
end
class Vendor < ActiveRecord::Base
attr_accessible :name, :address_attributes
has_one :address, :as => :addressable, :dependent => :destroy
accepts_nested_attributes_for :address
end
これはビューです:
- form_for @vendor do |f|
= f.error_messages
%p
= f.label :name
%br
= f.text_field :name
- f.fields_for :address_attributes do |address|
= render "shared/address_fields", :f => address
%p
= f.submit "Create"
これは部分的な shared/address_fields.html.haml です
%p
= f.label :city
%br= f.text_field :city
%span City/Town name like Dharan, Butwal, Kathmandu, ..
%p
= f.label :address1
%br= f.text_field :address1
%span City Street name like Lazimpat, New Road, ..
%p
= f.label :address2
%br= f.text_field :address2
%span Tole, Marg, Chowk name like Pokhrel Tole, Shanti Marg, Pako, ..
これがコントローラです: class VendorsController < ApplicationController
def new
@vendor = Vendor.new
end
def create
@vendor = Vendor.new(params[:vendor])
if @vendor.save
flash[:notice] = "Vendor created successfully!"
redirect_to @vendor
else
render :action => 'new'
end
end
end
問題は、すべてのフィールドに入力すると、期待どおりに両方のテーブルにレコードが保存されることです。
しかし、名前と都市または住所 1 だけを入力すると、検証は機能し、エラー メッセージが表示されますが、都市または住所 1 に入力した値は保持されないか、住所フォーム フィールド内に表示されませんか?
これは、編集アクションでも同じです。
レコードは保存されますが、住所は編集フォームに表示されません。クライアント モデルの名前のみが表示されます。実際、ログを見てみると、住所モデルの SQL はまったくクエリされていません。