У меня есть модель пользователя с отношением HABTM к группам. Я не хочу, чтобы пользователь мог быть в более чем 5 группах, поэтому хотел бы подтвердить длину отношений HABTM.Проверка длины ассоциации habtm без сохранения
На странице редактирования пользователя у меня есть список флажков, где пользователь может выбрать группы, в которых они хотят находиться (я использую formtastic для формы).
В моем контроллере пользователей я звоню:
@user.update_attributes(params[:user])
, которая вызывает рельсы автоматически обновлять ассоциации.
В моей модели пользователя у меня есть следующие:
def validate
if self.groups.length > 5
self.errors.add(:groups, "cannot have more than 5 groups")
end
end
Это вызывает форму, чтобы провалить проверку, но update_attributes называют уже обновил базу данных, чтобы отразить изменения в соответствующих группах. Таким образом, каждый раз, когда пользователь нажимает кнопку сохранения, их групповые ассоциации сохраняются, хотя запись недействительна.
Каков наилучший способ решить эту проблему?
Я думаю, что, возможно, валидация должна быть на групповой модели вместо модели пользователя, будет ли это работать? В идеале я хотел бы обновить связанные группы без сохранения записи, выполнить проверку и THEN сохранить запись.
Это не решает, он все еще сохраняющиеся изменения. – jonnii
Похоже, я неправильно определил вашу проблему, я думал, что вы проверяете как обратный вызов. Проблема заключалась в том, что вы переопределяли проверку. – EmFi
Я переместил проверку в пользовательскую процедуру проверки, как предполагалось, но это все еще не решает проблему. – jonnii