【发布时间】:2014-12-29 15:25:56
【问题描述】:
我正在尝试在我的 rails 4 应用程序中实现基于角色的访问系统,并且我希望最终用户 (super_admin) 能够通过 UI 编辑角色分配。
我已经取得了一些成功,但不禁觉得必须有更好的方法(因为我是 Rails 新手)。这是我的代码:
users_roles_controller.rb
# GET /user_roles/new/:id
def new
@roles = Role.all
end
# POST /user_roles/new/:id
def create
populated = params[:roles][:name].reject(&:empty?)
populated.each do |key|
@user.add_role Role.find(key).name
end
redirect_to users_path
end
在我的表单中(HAML 和 simple_form):
= simple_form_for :roles, :url => create_user_roles_path(@user.id), :method => "post" do |f|
= f.input :name, :collection => @roles, as: :check_boxes
= f.button :submit
我正在努力解决以下问题:
- 由于没有模型,如何验证表单条目?
- 我应该使用强参数吗?如果是,我如何在没有模型的表单上实现
- 如何创建类似的内容,但当前角色已被选中? (真正的角色管理)
更新 我已经研究过使用 cmets 建议的改革 Gem。这似乎是一个很好的解决方案。然而,我对这个案例的实施有疑问。
让我把它画出来: 我在数据库中有 3 个表:
- 用户
- users_roles(具有 2 个属性的映射表:user_id & role_id {Join Table -> HABTM})
- 角色
我想构建一个表单,其中包含角色模型中的所有值作为复选框。复选框应指示将哪些值输入 users_roles 表(与特定用户相关)。我想要改革做的是验证这个表单的输入。此表单将始终显示角色中的所有值,但部分/所有框可能未选中。
我在我的应用中创建了一个表单文件夹,并从以下代码开始:
class UserRoleForm < Reform::Form
property :user__id, on: :user
property :role_id, on: :role
validates :user__id, presence: true
validates :role__id, presence: true
end
我的方向正确吗?
感谢您的帮助。
【问题讨论】:
-
1.查看reform 了解无表模型。
-
谢谢@JustinM。我在我的帖子中添加了更新。看起来你肯定在做某事。
标签: ruby-on-rails-4 devise rolify pundit reform