我有一个用户模型具有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)。这可能吗?
答案 0 :(得分:2)
这是一个简单的例子。警告:这包括没有错误处理,我建议您根据自己的应用程序自行构建。它还假设您知道如何连接路由等。您可能希望在JS中动态获取users_path
。查看gon
gem以获取更多相关信息。
$(".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