Ich baue eine Angular 2 Front-End-App, die Daten von einer Rails 5 API erhält. Es ist eine Art Netzwerkinventar App.Rails has_many Eingabe von Angular2 Frontend wird nicht gespeichert
Ich habe eine Asset-Form in Angular2 und es gibt einen Multi-Select-Eingang für die ip_addresses der Anlage.
Ich kann Rails nicht dazu bringen, diese Daten im Back-End zu akzeptieren.
Das Anlageobjekt:
{"name":"SERVER_A","serial":"XOR-354","location_id":1,"asset_type_id":1,"model_id":3,"ip_address_ids":[5304,5305]}
Hier ist meine asset.service.ts:
createAsset(asset: Asset){
let formData = new FormData();
for(var key in asset){
if(key == "ip_address_ids") {
for (var i = 0; i < asset[key].length; i++) {
formData.append("asset["+key+"][]", JSON.stringify(asset[key][i]));
console.log("asset["+key+"][]", JSON.stringify(asset[key][i]));
}
}
if(key != "id") {
formData.append("asset["+key+"]", asset[key]);
}
}
let headers = new Headers();
let authToken = localStorage.getItem('auth_token');
headers.append('Authorization', authToken);
return this.http.post(this.assetUrl, formData, { headers })
.map((response: Response) => response.json());}
Dies ist, was im in der Rails-Server-Konsole bekommen:
Started POST "/assets" for ::1 at 2017-02-06 13:58:33 +0100
Processing by AssetsController#create as HTML
Parameters: {"asset"=>{"name"=>"SERVER_A", "description"=>"undefined",
"serial"=>"XOR-354", "asset_tag"=>"undefined",
"firmware"=>"undefined", "ssh"=>"undefined", "telnet"=>"undefined",
"http"=>"undefined", "location_id"=>"1", "asset_type_id"=>"1",
"model_id"=>"3", "prtg_id"=>"undefined", "ticket_id"=>"undefined",
"ip_address_ids"=>"5304,5305"}}
Unpermitted parameter: ip_address_ids
Ich habe den Parameter ip_address_ids
zugelassenDie seltsame Sache ist, dass, wenn ich den erweiterten REST-Client in Chrome verwenden, es erfolgreich ist.
Here's an image of the REST Client
Das Ergebnis in der Rails-Server-Konsole:
Started POST "/assets" for ::1 at 2017-02-06 14:04:42 +0100
Processing by AssetsController#create as HTML
Parameters: {"asset"=>{"name"=>"Test", "asset_type_id"=>"2", "location_id"=>"33", "model_id"=>"4", "ip_address_ids"=>["5213", "5214"]}}
Ich denke, dass das Problem ist, dass Angular die IDs als String sendet und das REST-Client sendet die IDs als Array von Strings .
Haben Sie eine Idee, wie Sie das beheben können?
Versuchen Sie 'accept_nested_attributes' auf Ihrem Modell (Backend) zu setzen und ändern Sie ALLE Ereignisse (Front und Backend) von' ip_address_ids' in 'ip_address_ids_atrributes'. – developer033
Ist das nicht nur, wenn ich eine neue IP-Adresse erstellen möchte? Die IPs sind bereits in der Datenbank vorhanden. – Betax
Sind Sie sicher, dass es bereits existiert? Wie Sie bereits erwähnt haben, können Sie den Parameter nicht übergeben. 'Unerreichter Parameter: ip_address_ids'. – developer033