我有一個Rails/Mongoid應用具有以下關係:多層次embeds_many工作在新的罰款,但不能更新
class CaseType
include Mongoid::Document
embeds_many :case_type_field_sets
accepts_nested_attributes_for :case_type_field_sets, :reject_if => lambda { |a| a[:description].blank? }, :allow_destroy => true
field :description, type: String
end
class CaseTypeFieldSet
include Mongoid::Document
embeds_many :field_definitions
embedded_in :case_type
field :description, type: String
accepts_nested_attributes_for :field_definitions, :reject_if => lambda { |a| a[:description].blank? }, :allow_destroy => true
end
class FieldDefinition
include Mongoid::Document
field :description, type: String # what we use to render the UI
embedded_in :case_type_field_set
end
所有這些正在使用的case_types_controller更新,所有PARAMS被允許:
def case_type_params
params.require(:case_type).permit(:description,
:case_type_field_sets, case_type_field_sets_attributes:
[:id, :description, :_destroy, field_definitions_attributes:
[:id, :description, :_destroy]])
end
如果我創建一個新的case_type,然後添加一個新case_type_field_set它,然後添加一個新field_definition到case_type_field_set,都在一個動作,它工作正常。但是,如果我創建了一個新的case_type,然後添加一個新的case_type_field_set,然後保存它,然後返回並對其進行編輯,然後向case_type_field_set添加一個新的field_definition,它表示不會發生錯誤,但是當我返回編輯時它,新添加的field_set缺失。有沒有在服務器日誌中提到的錯誤:
Started PATCH "/case_types/57b479f4a4610006beba7254" for ::1 at 2016-08-17 13:21:45 -0400
Processing by CaseTypesController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xJnbp9gr8yyDamRZItfBPUDDX4qSoOQ/XIbGM0D8urW6UAYGuM5FIT1w8jLaBhSnEC7PF/KMAxfB6+HGCYoAiA==", "case_type"=>{"description"=>"case type 1", "case_type_field_sets_attributes"=>{"0"=>{"_destroy"=>"false", "description"=>"asdf", "field_definitions_attributes"=>{"1471454502151"=>{"_destroy"=>"false", "description"=>"new fd 3"}}, "id"=>"57b49c24a4610006beba725c"}}}, "commit"=>"Update Case type", "id"=>"57b479f4a4610006beba7254"}
MONGODB | localhost:27017 | opencaseware_development.find | STARTED | {"find"=>"case_types", "filter"=>{"_id"=>BSON::ObjectId('57b479f4a4610006beba7254')}}
MONGODB | localhost:27017 | opencaseware_development.find | SUCCEEDED | 0.0009080000000000001s
0.000413s
Redirected to http://localhost:3000/case_types
Completed 302 Found in 12ms
任何想法,爲什麼新的嵌套創作的作品,但更新靜靜地失敗?
更新,我注意到,當原始創建被調用時,它會觸發一個mongo插入,但是當我用新的嵌入更新現有記錄時,它不會觸發插入,如果這有幫助。
更新 - 我很確定這個問題完全是由於模型。在控制檯中,如果製作CaseType,CaseTypeFieldSet和FieldDefinition,然後洞住最頂層的父項,則可以輕鬆地重現此操作,但這一切都可行。但是,如果您創建CaseType和CaseTypeFieldSet,請保存CaseType,然後嘗試將新的FieldDefinition添加到CaseTypeFieldSet,然後保存父項,則FieldSet將丟失。