Как отменить предотвращение сохранения и отправить сообщение об ошибке msg?
return false во время цепочки обратного вызова указывает activemodel прекратить (аналогично тому, как при добавлении ошибок в модель во времявалидация указывает на то, что он должен остановиться в этот момент)
self.errors.add_to_base "msg" добавит в модель ошибку, которая затем может быть отображена в представлении.
Получите в модели устройство, current_user.id, которое кажется невозможным, так как же гуру Rails могут делать что-то подобное, описанное выше?
Модели не должнычтобы действительно знать о таких вещах, как текущий запрос, если это вообще возможно, вы должны блокировать вещи на уровне контроллера / действия.
РЕДАКТИРОВАТЬ:
Итак, роль контроллеров состоит в том, чтобыиметь дело со всем, что связано с получением правильной информации на основе запроса и передачей ее в представление (которое становится ответом).Люди часто говорят «сделайте ваши модели толстыми, а ваши контроллеры худыми», но это можно сказать о любой системе, которая включает объектно-ориентированное проектирование - ваша логика должна быть в объектах, когда это возможно.
При этом, в целомСмысл контроллеров заключается в том, чтобы справиться с маршрутизацией нужных вещей в нужных местах, а аутентификация - определенно проблема маршрутизации.
Вы можете легко переместить строку, сравнивая creator_id с идентификатором пользователя в действии, и реагировать на основеэто.
Теперь, иногда вам действительно нужны эти вещи в модели, и нет никакого способа обойти это.Это становится проблемой, потому что вам нужно бороться с рельсами, чтобы получить его там.Одним из способов было бы attr_accessor поля current_user в вашей модели и передать его при инициализации.Другой способ - удалить поля из хэша params, которые пользователь не может изменять в действии.Хотя это и не так приятно.