В моем приложении Rails у меня есть пользователи, роли и разрешения.Удалить из таблицы, если флажок не установлен
При создании/редактировании роли вы можете выбрать, какие разрешения разрешены, установив флажок, который сохранит разрешение в таблице с именем «role_permissions» (в основном разрешенные разрешения сохраняются в таблице соединений).
Так что мой изменить способ роль заключается в следующем:
def edit
@role = Role.find(params[:id])
@permissions_by_controller = Permission.order('controller asc').group_by(&:controller)
end
и метод обновления (патч):
def update
@role = Role.find(params[:id])
if @role.update_attributes(role_params)
redirect_to roles_path, :notice => 'Article updated!'
else
render 'edit'
end
end
и Params:
def role_params
params.require(:role).permit(:name, permission_ids: [])
end
В редактированием У меня есть флажок:
<%= check_box_tag "role[permission_ids][]", permission.id, @role.permissions.include?(permission), :id => permission.id, :class => 'switch__checkbox' %>
Это отлично работает, когда я устанавливаю флажок и сохраняет его.
Однако, когда я снимаю флажок и сохраняю, он не удаляет разрешения ... предположительно, потому что никакого парама не передается обратно. Как я могу это решить?
Ассоциация устанавливается как:
class Role < ActiveRecord::Base
has_and_belongs_to_many :users, :join_table => 'users_roles'
has_and_belongs_to_many :permissions, :join_table => 'roles_permissions'
end
class Permission < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => 'roles_permissions'
end
Примечания: Я также заметил, что Роли не могут быть удалены из пользователя таким же образом, как он использует флажки.