【问题标题】:Changing a user's role via dropdown and Ajax通过下拉菜单和 Ajax 更改用户角色
【发布时间】:2014-05-31 03:48:10
【问题描述】:

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

ID    NAME
1     user
2     manager
3     admin

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

后端部分似乎很简单:在 UsersController 中编写一个change_role 方法(使用before_action: is_admin)并让它在respond_to 块内处理ajax 请求。我只是想弄清楚如何使用 Rails 助手和 Unobtrusive JS(远程:true)以干净的方式构建前端。这可能吗?

【问题讨论】:

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


    【解决方案1】:

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

    app/assets/javascripts/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
    

    【讨论】:

      猜你喜欢
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2014-07-05
      • 1970-01-01
      相关资源
      最近更新 更多