0

私はこのモデルを持っています:StoreAddress

これを他のモデルで使用している2番目のモデルAddressには、さまざまなモデル用のカスタムフィールドがいくつかあります。

はい、ポリモーフィックのようですがvarchar、クラスのフィールドがないため、整数を使用しています。(最適化のもの)

今私のStoreモデルでは、このようなセットの関連付け:

class Store < ActiveRecord::Base
    has_many :addresses, :foreign_key => "parent_id", :conditions => ['parent_kind = ?', 2]
    accepts_nested_attributes_for :addresses
end 

今私のコントローラーで私はします:

@store.addresses.build

そしてf.fields_for :addresses...、フォーム内で使用できます。

フォームを送信してデータをデータベースに保存すると、問題が発生します。

storesテーブル内のレコードが保存され、のレコードはストアのが適切な場所に保存されaddressesますが、これはMySQLのその属性のデフォルト値です。parent_idparent_kind0

私のクイックフィックスはこれでした:

@store = Store.new(params[:store])
    @store.addresses[0].parent_kind = 2
    if @store.save
    ....

しかし、私は別の方法があるに違いないことを知っています。

何か提案はありますか?

ありがとう。

4

1 に答える 1

2

ネストされたフォームで非表示フィールドを使用してみましたか?

<%= f.fields_for :addresses, Address.new do |ff| %>
  <%= ff.hidden_field :parent_kind, :value => 2 %>
  ...

編集

セキュリティ上の懸念から使用したくない場合は、別の方法が役立つ可能性があります。次のように、関連付けコールバックを使用してみることができます。

class Store < ActiveRecord::Base
  has_many :addresses, :foreign_key => "parent_id", 
                       :conditions => ['parent_kind = ?', 2],
                       :before_add => Proc.new { |store,address| address.parent_kind = 2}
  accepts_nested_attributes_for :addresses
end 
于 2012-07-04T19:29:12.090 に答える