我的体育俱乐部主页由几个部门组成。 目前授权系统是通过使用cancan来实现的。
每个部门可以拥有多个用户,每个用户可以属于多个部门:
#department.rb
has_and_belongs_to_many :users
\ user.rb
has_and_belongs_to_many :departments
这非常有效。但我希望有可能在用户表单中管理此关联。我在每个部门都有一组复选框。这是通过这一行来实现的(使用simple_form):
<%= f.association :departments,
:as => :check_boxes,
:collection => Department.specific.order('name' => :asc),
:label_method => :name,
:value_method => :id %>
现在我只想允许更改多个值。在客户端,我可以通过简单地隐藏或禁用一些复选框来实现这一点。但是当我不再检查它时,这不是保存在服务器上。 复选框值将由一组id传输。在这个数组中操纵id很有可能。 在服务器端,我必须检查当前用户是否有权将用户分配给部门。当他没有权利时,我需要保持这种关联不变。
有没有一种优雅的方法来实现这一目标?
我正在使用具有强参数的Rails 4.0。
由于
答案 0 :(得分:0)
所以你的问题基本上是关于server-side validation
- 检查用户是否可以编辑服务器端的关联?
我开始考虑设置动态强大的参数,以便在模型工作时集成到模型中:
#app/controllers/your_controller.rb
def update
@item = Model.find(params[:id])
@params = (can? :update, @item) ? "" : "departments: []"
end
private
def controller_params
params.require(:controller).permit(:attributes, @params.to_sym)
end