2016-07-27 5 views
0

Ich benutze AngularJS 1.5 mit Rails 3.2 auf dem Backend und wenn ich ein leeres Array nach der Zeit, die es zu meinem Rails create -Methode bekommt etwas von einem leeren Array zu einem Nullwert.AngularJS posten ein leeres Array wird zu Null

Kurz vor Invoice.save kann ich sehen, dass timesheets_attributes auf [] gesetzt ist.

construct_json: (scope) -> 
    { 
    # <snip irrelevant info> 
    # Timesheets 
    timesheets_attributes: _.map(scope.invoice.timesheets_attributes, (ts) -> 
     _.omit(ts, 'job') 
    ) 
    } 

Wenn ich in meiner Rechnung Controller setzen byebug create-Methode ich, dass params finden [: Rechnung] [: timesheets_attributes] auf Null.

Wenn ich ein Arbeitszeittabellenblatt hinzufüge, wird das Array ordnungsgemäß von Angular bereitgestellt. Gibt es eine Möglichkeit, das Array davon abzuhalten, in eine Null umgewandelt zu werden?

My um aktuelle Arbeit ist es, ein before_filter zu bewerben, aber diese hacken jetzt aufgehört hat, arbeitet aufgrund der Einführung von cancancan. Die Ressource load_and_authorize_cancan kann vor jedem der Filter ausgeführt werden. Ich habe diesen Hack nie wirklich gemocht und würde gerne herausfinden, warum er ein perfektioniertes leeres Array in ein Nichts verwandelt.

def json_fix 
    params[:invoice][:timesheets_attributes] ||= [] 
    end 
+0

Rail action_dispatch filtert leere Arrays aus, bevor cancan die Parameter abrufen kann. Sie können diese Funktion deaktivieren mit 'config.action_dispatch.perform_deep_munge = false' seit Rails 4.1 –

Antwort

0

Ich fand, dass, wenn Sie die before_filter mit meinem json_fix über den cancancan load_and_authorize_resource Ort wie so dann funktioniert es.

before_filter :json_fix, only: [:update, :create] 
before_filter :authenticate_staff! 
load_and_authorize_resource # Check cancancan 
Verwandte Themen