通过下拉列表和Ajax更改用户的角色

时间:2014-05-31 03:48:11

标签: javascript ruby-on-rails ajax ruby-on-rails-4

我有一个用户模型具有role_id属性的网站。角色表中目前有三个角色:

ID    NAME
1     user
2     manager
3     admin

在网站的管理部分,有一个包含用户列表的表。我尝试做的是为每个用户提供一个下拉菜单,用户的角色可以通过ajax请求进行更改。此下拉列表还需要根据可用角色动态填充其可能的值。例如,如果稍后添加foobar角色,则下拉菜单应反映该内容。

后端部分似乎足够直接:在UsersController中编写change_role方法(使用before_action: is_admin)并让它处理respond_to内的ajax请求{1}}阻止。我只想弄清楚如何以干净的方式构建前端,使用Rails助手和Unobtrusive JS(远程:true)。这可能吗?

1 个答案:

答案 0 :(得分:2)

这是一个简单的例子。警告:这包括没有错误处理,我建议您根据自己的应用程序自行构建。它还假设您知道如何连接路由等。您可能希望在JS中动态获取users_path。查看gon gem以获取更多相关信息。

应用程序/资产/ Javascript角/ users.coffee

$(".role-select").on "change", ->
  user_id = $(this).data("user-id")
  role_id = $(this).val()

  $.post "/users/#{user_id}/update_role", 
         role_id: role_id

视图

<select class='role-select' data-user-id={user.id}>
  [...]
</select>

控制器

def update_role
  respond_to do |format|
    format.js do 
      @user = User.find(params[:id])
      @user.update(role_id: params[:role_id])
      # manage return status here
      head :ok
    end
  end
end