2016-08-17 50 views
0

我有一個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將丟失。

回答

0

我很尷尬地說,重新啓動rails服務器解決了這個問題。

相關問題