我需要让用户选择一个群组,但是只能选择他所在的群组。这应该需要向后端请求数据,我做了一个 API,传入一个用户的 ID,就返回他所在的群组,比如:
$ curl -d '{"user_id": "1"}' http://localhost:3000/api/v1/groups/for_user -H Content-Type:application/json
[[1, "测试团队"]]
之前使用Select2
做了返回所有群组的程序如下:
$('select[id=input-group-name]').select2(
ajax:
url: ROOT_PATH+'api/v1/groups/names'
dataType: 'json'
delay: 250
processResults: (data) ->
{
results: $.map( data, (d, i) ->
{ id: d[0], text: d[1] }
)
}
results: (data, page) ->
results: data
)
上面使用的是GET
请求,现在需要使用POST
请求,并传入user_id
参数,目前的程序是:
$('select[id=input-group-name-for-user]').select2(
ajax:
type: 'POST' // <----------------------------------- 将请求改为POST
url: ROOT_PATH+'api/v1/groups/for_user'
params: {
contentType: 'application/json; charset=utf-8'
}
dataType: 'json'
data: // <------------------------------------------ 是在这里传入user_id吗?
delay: 250
processResults: (data) ->
{
results: $.map( data, (d, i) ->
{ id: d[0], text: d[1] }
)
}
results: (data, page) ->
results: data
)
请问该如何传递参数user_id
呢?
PS:Select2
的设计和文档真心看得头大,完全靠摸索。
EDIT-1: 我尝试了如下暴力方式:
data: ->
user_id: 1
但是尝试如下优雅方式时却不行:
data: ->
user_id: $(this).attr('user_id')
在select
元素上添加data-user-id
属性:
<%=
f.association :groups,
label: t('research_record.public_groups'),
required: true,
label_method: :name,
value_method: :id,
collection: @research_record.groups,
input_html: {
id: 'input-group-name-for-user',
data: { user_id: current_user.id } # <------------------------- 这里添加data-user-id属性
}
%>
然后优雅地传递参数:
data: ->
user_id: $('select[id=input-group-name-for-user]').data('user-id')