javascript - 如何在辅助 Rails 中从 collection_select 向路线发送 POST

标签 javascript ruby-on-rails onchange collection-select

我是 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 事件监听器,获取 roleuser 值,并创建一个 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/

相关文章:

javascript - Cordova 应用程序的 LocalStorage 中是否可以有默认值?

javascript - 检查字符串是否为整数

ruby-on-rails - rails :order by date in Postgres returning incorrect order

ruby-on-rails - 使用 Capybara Webkit 1.3.1 测试警报对话框文本

javascript - 立即检测输入[type ="text"]的变化

javascript - 当再次选择相同条目时,在 HTML <select> 框中触发事件

javascript - 如何获取隐藏文本字段值的onchange值

javascript - 如何使用正则表达式在输入小数时保留 0 起始字符?

javascript - 不和谐嵌入中的行分隔符/中断

php - 雅虎管道的替代品