Rails hidden_字段或JavaScript数组将作为逗号分隔的字符串而不是数组发布
我曾经使用Rails hidden_字段或JavaScript数组将作为逗号分隔的字符串而不是数组发布,javascript,jquery,ruby-on-rails,arrays,hidden-field,Javascript,Jquery,Ruby On Rails,Arrays,Hidden Field,我曾经使用集合\u select,它使具有 这就是我希望它在控制器中的方式: def groupchat_params params.require(:groupchat).permit(:topic, {:user_ids => []}) end 问题:我试图用无序列表重新创建此功能,ul和li,因为这是跨平台列表选择器的共识。以下是我所拥有的: <ul id="special-select"> <%= f.hidden_field
集合\u select
,它使
具有
这就是我希望它在控制器中的方式:
def groupchat_params
params.require(:groupchat).permit(:topic, {:user_ids => []})
end
问题:我试图用无序列表重新创建此功能,ul
和li
,因为这是跨平台列表选择器的共识。以下是我所拥有的:
<ul id="special-select">
<%= f.hidden_field :user_ids, { multiple: true, value: [] } %>
<% User.where.not(id:current_user).each do |user| %>
<li class="groupmember-select" id=<%= user.id %> value=<%= user.id %>>
<%= user.name %>
</li>
<% end %>
</ul>
当我选择一些项目并在浏览器控制台中将其签出时,它看起来是我所需要的格式:
> user_ids
["2", "6", "3"]
但是,我注意到,当我在浏览器中右键单击对象并粘贴它时,我会得到以下结果:
> user_ids
[0: "2", 1: "6", 2: "3", length: 3]
当我使用submit按钮发布上述表单时,我得到以下信息(所有项目都在一个字符串中,用逗号分隔):
我已经尝试了JSON.stringify
(输出不变,看起来与上面相同)和JSON.parse
(与我所需要的差不多,但是转义引号在后端的帖子中是可见的,不管这两种方法都不起作用
我以前也遇到过类似的问题,但那是在我有:user_id
默认为数组之前
任何洞察都很好!您不能只传递一个隐藏字段的数组。您需要做的是添加多个同名隐藏字段。生成的HTML应如下所示:
{"utf8"=>"✓",
"authenticity_token"=>"redacted",
"groupchat"=>{"topic" =>"5dd",
"user_ids"=>["5","6","7","8"]},
"commit"=>"Done"}
<input value="1" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
<input value="2" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
<input value="3" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
Javascript部分:
var selectedUsers = [];
$("#special-select li").click(function(){
var index = selectedUsers.indexOf($(this).attr("data-hidden-field-tag"));
if (index > -1) {
selectedUsers.splice(index, 1);
}
else {
selectedUsers.push($(this).attr("data-hidden-field-tag"));
}
$("#hidden-fields").html(selectedUsers);
$(this).toggleClass("selected");
});
我尝试过这样做,但我无法理解其背后的概念。我不想提交表单中的每个值。我只想提交用户选择的值。这样做的唯一方法是在后端解析字符串吗?在我的解决方案@ShobhitLike中,您将如何做到这一点?您如何像在sele中一样一次性提交数组ct?我不想让每次点击事件都触发发送帖子。但我不明白你是如何从列表中选择要在表单中提交的项目的。你的方法不只是将所有用户作为帖子中的选定用户推送进来吗?不,它使用与你选择项目完全相同的方法。我只是设置hi,而不是设置值dden字段作为一个整体。试一试,它对我很有用。但是将它添加到div做什么呢?如何提交我在表单中选择的项目?
{"utf8"=>"✓",
"authenticity_token"=>"redacted",
"groupchat"=>{"topic" =>"5dd",
"user_ids"=>["5,6,7,8"]},
"commit"=>"Done"}
<input value="1" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
<input value="2" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
<input value="3" multiple="multiple" type="hidden" name="groupchat[user_ids][]">
<div id="hidden-fields" style="display: none;"></div>
<ul id="special-select">
<% User.where.not(id: current_user.id).each do |user| %>
<li class="groupmember-select" id=<%= user.id %> value=<%= user.id %> data-hidden-field-tag="<%= html_escape_once f.hidden_field(:user_ids, { multiple: true, value: user.id }) %>" >
<%= user.identity %>
</li>
<% end %>
</ul>
var selectedUsers = [];
$("#special-select li").click(function(){
var index = selectedUsers.indexOf($(this).attr("data-hidden-field-tag"));
if (index > -1) {
selectedUsers.splice(index, 1);
}
else {
selectedUsers.push($(this).attr("data-hidden-field-tag"));
}
$("#hidden-fields").html(selectedUsers);
$(this).toggleClass("selected");
});