Добавить дополнительные данные в ajax:beforeSend (link_to)?

У меня есть link_to с remote: установите в true. Что я хочу сделать, это добавить дополнительный атрибут с запросом, поэтому я попробовал это с этим:

<script>
  $(document).ready(
      function(){
        $("#part_btn").bind("ajax:beforeSend",
            function(event, xhr, settings, data){
              settings.data += "&user_id=5"
            })
      })
</script>

Теперь я даже не знаю, возможно ли это, потому что user_id никогда не отправляется на контроллер, и когда я регистрирую setting.data я получил null&user_id=5,

Если это невозможно, есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ:

Я не добавил дополнительный параметр к link_to потому что user_id на самом деле происходит из тега select, и я хотел добавить выбранное значение в качестве дополнительных данных, например:

settings.data += ("&user_id="+$("#register_user_id option:selected").val());

это то, что мой link_to похоже:

  <%= text_field_tag :part_id, nil, :class => 'text_field', data: {source: autocomplete_parts_for_registers_registers_path} %>
  <%= link_to('toevoegen', '#!', id: 'part_btn', class: 'btn btn-small btn-success addbtn', style: "margin-top: 5px", data: {source: add_part_registers_path}, remote: true) %>

2 ответа

Я думаю, что лучший и самый простой способ обновить link_to, когда пользователь изменяет раскрывающийся список с помощью javascript или дополнительного вызова ajax

JS
$("#user_select").change(function() {
  user_id = $(this).val();
  $("#user_link").data("params") = "user_id=" + user_id;
})

Extra Ajax
send user_id to server with user_id and make a method_name.js.erb and update link from there
like:
link_to "link", method_path(user_id: params[:user_id]), remote: true

Вместо того чтобы использовать подход JavaScript, рассмотрите возможность отправки параметров с маршрутом в link_to:

link_to "My link", some_path(user_id: 5), remote: true, method: :post

Это добавит :user_id со значением 5 к параметрам в контроллере для some_path,

Кроме того, вы можете использовать data: Атрибут по ссылке, чтобы добавить любые параметры, которые вы хотите в запрос XHR.

link_to "My link", id: "user_link", some_path, remote: true, method: :post, data: { params: { user_id: 123 }.to_param }

Если вам нужно изменить значение динамически:

$("#user_select").change(function() {
  user_id = $(this).val();
  $("#user_link").data("params", "user_id=" + user_id);
})

На самом деле, похоже, что именно это делает Rails для отправки значений AJAX из jquery_ujs.

Очевидно, что обязательно проверьте значение user_id на стороне сервера.

Другие вопросы по тегам