3

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 はまったくクエリされていません。

4

1 に答える 1

1

なぜf.fields_for :address_attributesですか?

そうではありませんか:

- f.fields_for :address do |address_fields|
  = render "shared/address_fields", :f => address_fields

からの値をロードしないため、編集およびエラー時に値をロードaddress_attributesしていません@vendor.address

于 2010-04-29T15:14:22.670 に答える