0

В Ruby on rails я стараюсь сохранять данные в нескольких таблицах с большим количеством отношений.RoR: многоуровневое вложенное сохранение

Мои модели выглядит:

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 
     } 
    ] 
} 

Все прекрасно работает, но единственная проблема в том, что evidencia_id в таблице ciselny_rad заполняется нулем , а не новое созданное доказательство.

Вы можете мне помочь? Благодаря

ответ

1

Try что-то вроде:

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

в вашем Evid классе и:

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

в вашем BankUcet классе.

(Edit) Аргументация: в моем опыте использования вложенных атрибутов, выбрасывая inverse_of и вокруг места обычно сортирует любые проблемы ..

Смежные вопросы