我的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) %>
答案 0 :(得分:0)
不要采用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);
})
In fact, it looks like this is exactly what Rails does to send AJAX values from jquery_ujs.
显然,请务必检查user_id
服务器端的值。
答案 1 :(得分:0)
我认为当用户通过javascript或额外的ajax调用更改下拉列表时更新link_to的最佳和最简单的方法
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