Open jarrett opened 9 years ago
Proposed fix in pull request #189.
I should add that overriding Backbone.Model#toJSON
is another approach to working with Strong Parameters. Nonetheless I think it's worthwhile to ensure backbone-rails preserves the documented functionality of Backbone.Model#save
.
This behaviour by the JS patch is very annoying and it seems like that it can be easily fixed by considering options.attrs here:
if (model.paramRoot) {
data = {};
data[model.paramRoot] = model.toJSON(options);
} else {
data = model.toJSON();
}
Why hasn't this been fixed yet?
+1 to bump
Line 19 in backbone_rails_sync.js reads:
It looks like this variable is always overwritten in the next few lines:
So line 19 seems to do nothing. If I'm correct, It's a few CPU cycles gone to waste.
More importantly though,
options.attrs
is ignored. That's bad because it breaks calls like the following:The above should send only
{name: "example"}
rather than the whole attributes hash in the HTTP request. This is very important in Rails, where strong parameters is the officially supported way to whitelist attributes. In Rails, you want to be able to setconfig.action_controller.action_on_unpermitted_parameters = :raise
to catch your own mistakes, but it breaks when backbone-rails forces you to send every attribute with every request.