我是 Ruby on Rails 的新手。 这是我从 html 调用的辅助方法。
def select_user_role (user)
@user = user
collection_select(:user, :role, User.roles.to_a, :first, :first, {}, {
data: {user_id: @user.id},
onChange: ""
})
end
选择工作正常。
我想从 onChange 向带有 POST 中的一些参数(如用户 ID 和角色位置)的路由发送调用。我该怎么做?
角色在用户模型中定义为枚举。
最佳答案
您可以向 collection_select
添加一个 change
事件监听器,这样,每当用户更改选择时,您就可以向您需要的 Controller 中需要的方法。
为您的collection_select
提供一个ID,并添加data
属性data-user
(作为示例):
<%= collection_select(
:user,
:role_id,
User.roles,
:first,
:first,
{},
{'data-user': 1}
) %> # Skipping the "on-tag" onChange attribute
然后您可以创建一个脚本来获取渲染的 select 标签,添加 change
事件监听器,获取 role
和 user
值,并创建一个 XMLHttpRequest,在 POST 请求中将这些值作为 JSON 传递:
<script>
let role_select = document.getElementById('user_role_id')
role_select.addEventListener('change', function() {
let role = this.value,
user = this.dataset.user,
xhr = new XMLHttpRequest()
xhr.open('POST', '/test', true)
xhr.setRequestHeader('Content-Type', 'application/json')
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
// Do whatever you want if it succeeds
} else {
// Do whatever you want if it doesn't succeed
}
}
xhr.send(JSON.stringify({role_id: role, user_id: user}))
})
</script>
关于javascript - 如何在辅助 Rails 中从 collection_select 向路线发送 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132452/