2016-12-06 52 views
0

嵌套我在angular2以下formBuilder:angular2 formBuilder組導致PARAMS

constructor(
    private formBuilder: FormBuilder) { 
    this.form = formBuilder.group({ 
     id: [], 
     title: ['', Validators.required], 
     dates: formBuilder.group({ 
     start_date: ['', Validators.required], 
     end_date: ['', Validators.required] 
     }, {validator: this.checkDates}) 
    }); 
} 

dates是在一個單獨的基團,這是出於驗證的目的。的onSubmit調用此服務方法:

update(academicTerm: AcademicTerm): Observable<AcademicTerm> { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    return this.http 
    .patch(this.endpointUrl + academicTerm.id, JSON.stringify(academicTerm), {headers}) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 

當我檢查後端(Rails5 API服務器)我可以看到這個PARAM組:

參數:{ 「ID」=> 「3」,「標題「=>」術語標題「,」日期「=> {」start_date「=>」2016-11-27「,」end_date「=>」2016-12-01「},」academic_term「=> {」id「 => 「3」, 「標題」=> 「期限CL」}}

注意在academic_term的哈希start_dateend_date不存在。

上的事情,我都強烈PARAMS設立這樣Rails的一面:

def academic_term_params 
    params.require(:academic_term).permit(:id, :title, :start_date, :end_date) 
end 

我已經嘗試設置在強PARAMS嵌套dates對象:

def academic_term_params 
    params.require(:academic_term).permit(:id, :title, :dates => [:start_date, :end_date]) 
end 

它沒有影響(日期不是一個關聯的屬性?)。所以雖然我可以更新標題,但我無法更新日期。

有沒有辦法拉平從角發出的PARAMS是這樣的:

參數:{ 「ID」=> 「3」, 「標題」=> 「期限標題」,「 start_date「=>」2016-11-27「,」end_date「=>」2016-12-01「}

或者有沒有辦法在Rails端修復它?

回答

1

在將請求發送到服務器之前,可以將對象弄平。

update(academicTerm: AcademicTerm): Observable<AcademicTerm> { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 

    academicTerm['start_date'] = academicTerm.dates.start_date; 
    academicTerm['end_date'] = academicTerm.dates.end_date; 
    // delete academicTerm.dates; // optional 

    return this.http 
     .patch(this.endpointUrl + academicTerm.id, JSON.stringify(academicTerm), {headers}) 
     .map(this.extractData) 
     .catch(this.handleError); 
} 
+0

'academicTerm [ '起始日期'] = academicTerm [ '日期']起始日期;'和'academicTerm [ 'END_DATE'] = academicTerm [ '日期'] END_DATE;'確實起作用,由於 –