Ruby on Rails обновляет записи таблицы соединений - PullRequest
0 голосов
/ 18 мая 2010

У меня есть две модели Users и Roles. Я установил взаимосвязь «многие ко многим» между двумя моделями, и у меня есть объединенная таблица под названием roles_users.

У меня есть форма на странице со списком ролей, которую пользователь ставит флажок и отправляет на контроллер, который затем обновляет таблицу roles_users.

На данный момент в моем методе обновления я делаю это, потому что я не уверен в лучшем способе:

role_ids = params[:role_ids]
user.roles.clear
role_ids.each do |role|
  user.roles << Role.find(role)
end unless role_ids.nil?

Таким образом, я очищаю все записи, затем зацикливаю, выкинул все идентификаторы ролей, отправленные из формы по почте, я также заметил, что если все флажки отмечены и форма опубликована, то в ней добавляются повторяющиеся записи, может кто-нибудь дать какой-нибудь совет на более эффективный способ сделать это?

1 Ответ

2 голосов
/ 18 мая 2010

Вы можете выполнить прямое задание, так как оно выполняет грязную работу за вас:

user.roles = params[:role_ids].present? ? Role.find_all_by_id(params[:role_ids]) : [ ]

ActiveRecord должен позаботиться о создании новых ассоциаций или удалении тех, которые больше не перечислены. Если что-то препятствует сохранению вашей модели соединения, например, неудачная проверка, у вас могут быть проблемы, но в большинстве случаев это должно работать как положено.

Я надеюсь, что вы используете has_many ...,: through для этого, а не устаревший has_and_belongs_to_many, который продолжает преследовать так много Rails-приложений из-за старого примера кода.

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