gpt4 book ai didi

ruby-on-rails - 如果未选中复选框,则从表中删除

转载 作者:行者123 更新时间:2023-12-02 20:55:08 24 4
gpt4 key购买 nike

在我的 Rails 应用程序中,我有用户、角色和权限。

创建/编辑角色时,您可以通过选中其复选框来选择启用哪些权限,这会将权限保存在名为“roles_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

和参数:

def role_params
params.require(:role).permit(:name, permission_ids: [])
end

在编辑 View 中,我有一个如下所示的复选框:

<%= 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

注意:我还注意到不能像使用复选框一样从用户中删除角色。

最佳答案

一个经典问题。 f.check_box 通过在取消选中时返回 false 来为您解决这个问题,但 check_box_tag 不会。

您可以使用标签前带有空值的隐藏字段来解决此问题。

<%= hidden_field_tag "role[permission_ids][]", '' %>
<%= check_box_tag "role[permission_ids][]", permission.id...

当未选择任何内容时,表单知道填充空值字段。 (如果您更清楚,您还可以输入 'false' 而不是空字符串。)

关于ruby-on-rails - 如果未选中复选框,则从表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com