Ruby on rails 如果未选中复选框,则从表中删除
在我的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
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...