Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果未选中复选框,则从表中删除_Ruby On Rails - Fatal编程技术网

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

Ruby on rails 如果未选中复选框,则从表中删除,ruby-on-rails,Ruby On Rails,在我的Rails应用程序中,我拥有用户、角色和权限 创建/编辑角色时,您可以通过选中复选框来选择启用哪些权限,该复选框将权限保存在名为“角色\权限”的表中(基本上,允许的权限存储在联接表中) 因此,我的编辑角色方法如下: def edit @role = Role.find(params[:id]) @permissions_by_controller = Permission.order('controller asc').group_by(&:controller) end

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

创建/编辑角色时,您可以通过选中复选框来选择启用哪些权限,该复选框将权限保存在名为“角色\权限”的表中(基本上,允许的权限存储在联接表中)

因此,我的编辑角色方法如下:

def edit
  @role = Role.find(params[:id])
  @permissions_by_controller = Permission.order('controller asc').group_by(&:controller)
end
以及更新方法(补丁):

和参数:

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' %>
permission.id,:class=>“切换\u复选框”%>
当我选中复选框并保存时,这可以正常工作

但是,当我取消选中复选框并保存时,它不会删除权限。。。大概是因为没有参数被传回。我如何解决这个问题

关联设置为:

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
类角色“users_roles”
拥有且属于多个:权限,:加入\u表=>“角色\u权限”
结束
类权限“角色\u权限”
结束

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

这是一个典型的问题
f.复选框
通过在未选中时返回
false
来解决此问题,但
复选框标签
不会

您可以使用一个隐藏字段来解决这个问题,该字段在标记之前有一个空值

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


补充steel的回答(由于我无法对我代表的回答发表评论) 我会对任何想用不同方法解决这个问题的人说

我更喜欢将隐藏的_字段附加到表单


由于我们正在调用
form.hidden\u字段
,因此名称和id将已经包含
角色
,并且它将添加
权限\u id
作为角色内部的键。 Multiple将添加所需的方括号

生成的html标记将是:


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