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
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 –