0

Ruby on rails では、たくさんのリレーションを持つ複数のテーブルにデータを保存しようとしています。

私のモデルは次のようになります。

evid.rb:

class Evid < ActiveRecord::Base
    attr_accessible :kod, :nazov, :okruh_id, :bank_ucets_attributes, :poc_stavs_attributes
    #attr_accessible :ciselny_rads_attributes

    has_many :ciselny_rads
    has_many :bank_ucets, :foreign_key => :evidencia_id
    has_many :poc_stavs, :foreign_key => :evidencia_id

    accepts_nested_attributes_for :poc_stavs, :allow_destroy => true
    accepts_nested_attributes_for :bank_ucets, :allow_destroy => true
    #accepts_nested_attributes_for :ciselny_rads, :allow_destroy => true
end

bank_ucet.rb

class BankUcet < ActiveRecord::Base
  attr_accessible :ciselny_rad_id, :evidencia_id
  attr_accessible :ciselny_rad_attributes

  belongs_to :ciselny_rad
  belongs_to :evid, :foreign_key => "evidencia_id"

  accepts_nested_attributes_for :ciselny_rad, :allow_destroy => true

end

ciselny_rad.rb

class CiselnyRad < ActiveRecord::Base
    attr_accessible :evidencia_id, :kod, :nazov, :ciselny_rad_cislos_attributes

    belongs_to :evid, :foreign_key => "evidencia_id"
    has_many :ciselny_rad_cislos, :dependent => :delete_all

    accepts_nested_attributes_for :ciselny_rad_cislos, :allow_destroy => true
end

poc_stav.rb

class PocStav < ActiveRecord::Base
    attr_accessible :evidencia_id, :hosp_roky_id, :poc_stav

    belongs_to :evid, :foreign_key => :evidencia_id
end

そして、私はデータを保存しようとしています

@bank_ucet = Evid.create(data)

data={
    "kod": "XX",
    "nazov": "XxxXxUxXxxX",
    "okruh_id": 5,
    "bank_ucets_attributes": [
        {
            "cis_banka_id": 1,
            "cislo_uctu": 999999,
            "cis_mena_id": 1,
            "ciselny_rad_attributes": {
                "kod": "XX",
                "nazov": "XxxXxUxXxxX"
            }
        }
    ],
    "poc_stavs_attributes": [
        {
            "hosp_roky_id": null,
            "poc_stav": 1000
        }
    ]
}

すべてうまく機能しますが、唯一の問題は、新しく作成された evid ではなく、テーブル ciselny_rad の evidencia_id が null で満たされていることです。

助けてください。ありがとう

4

1 に答える 1

1

次のようなものを試してください:

has_many :bank_ucets, :foreign_key => :evidencia_id, :inverse_of => :evid

あなたのEvidクラスで:

belongs_to :evid, :foreign_key => "evidencia_id", :inverse_of => :bank_ucets

あなたのBankUcetクラスで。

(編集) 推論: ネストされた属性を使用した私の経験では、inverse_of通常、その場所に投げ込むことで問題が解決されます..

于 2013-03-07T10:43:18.230 に答える