Ожидается, что метод контроллера обновлений рельсов будет использоваться только для одного объекта? - PullRequest
1 голос
/ 26 августа 2011

Я часто использую ajax для обновления или удаления объектов в контроллере.Теперь есть методы update и destroy, которые обычно ищут один идентификатор и выполняют над ним действия.Но мне часто нужно выполнять одно и то же действие для нескольких объектов.Я могу изменить метод обновления, чтобы захватывать идентификаторы в виде массива и проходить по ним, где, будь то один или несколько идентификаторов, он будет выполнять одно и то же действие для каждого - или создать почти идентичный метод для update_all.Разумно ли пытаться использовать update как метод update_all, или это сбивает с толку?Недостатком метода update_all может быть очень похожий код, но он сделан для всех.

Ожидается ли, что обновление в контроллере всегда будет для одного объекта?Что такое лучшие практики и что обычно делают люди?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Я предпочитаю не радикально менять концептуальное поведение 7 «из коробки» действий. Если кто-то еще придет и попытается работать с этим кодом, он, вероятно, будет сбит с толку тем, почему вы изменили его с обычного / обычного поведения действия обновления. Вместо этого я бы добавил маршрут коллекции, названный описательно (update_many или что-то в этом роде).

Кроме того, вы можете абстрагироваться от общего кода для просушки?

0 голосов
/ 26 августа 2011

Вы можете вызвать update для ActiveRecord::Relation (результат поиска), и он обновит все объекты. В основном это удобный метод, который выполняет описанный вами цикл и вызывает обновление для каждого объекта. (См .: документы )

Существует также метод update_all, который работает аналогично delete в том смысле, что он просто отправляет запрос в базу данных. Это обновит все записи одним запросом. Однако этот не не выполняет ни одну из проверок рельсов или обратных вызовов. На практике это сильно ограничивает полезность этого метода для повседневного кодирования. Я нашел этот метод более полезным для массовых действий в специальных сценариях.

Некоторые комментарии:

Одним из недостатков Rails и ActiveRecord, в частности, является то, что его модель обратного вызова основана на взаимодействии одной записи с базой данных. Хотя это делает кодирование невероятно замечательным, оно делает большие пакетные транзакции действительно тяжелыми. Я лично потратил много времени, работая над этим недостатком. В целом это стоит того, чтобы воспользоваться другими преимуществами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...