【发布时间】:2017-12-20 16:53:31
【问题描述】:
我有一个模型Group,其中has_manyUsers。
class Group < ApplicationRecord
belongs_to :user
has_many :users
serialize :user_ids, Array
end
我在前端使用 JS 将User ids 添加到数组user_ids。隐藏字段如下所示:
= f.hidden_field :user_ids, id: "ids_field"
选择几个用户后,将他们添加到 JS 数组并将隐藏字段的值分配给该数组,我使用强参数(将 user_ids 作为数组)提交以从参数创建一个新对象:
@group = Group.new(group_params)
def group_params
params.require(:group).permit(:name, :user_id, :user_ids=>[])
end
日志在逗号分隔列表中显示了带有 user_ids 的提交:
Processing by GroupsController#create as JS
Parameters: {"utf8"=>"✓", "group"=>{"name"=>"", "user_ids"=>["25,1"]}, "commit"=>"Save Squad"}
在控制台中检查Group 显示只有数组中的第一个ID 被分配给组。
irb(main):128:0> Group.last.user_ids
..
[
[0] 25
]
在过去的两天里,我一直在这个问题上撞墙,根本无法解决问题。我尝试了以下变化: - 在前端使用 JSON - 删除后端的序列化 - 使用 .split(",") 拆分数组参数 - 使用 group_params,包括/排除 user_ids 上的“=> []”,并将显式名称添加到我的隐藏字段。通常我会在这里得到一个不允许的参数错误。 - 使用 Group.users 将数组分配给组模型
非常感谢任何帮助或指导。我觉得我在某个时候已经把所有部分都弄对了,只是不是同时。如果我完全离开并且有更好的方法来做到这一点,我准备放弃这个并继续前进。
提前谢谢你:)
编辑:更多玩弄表明 user_ids 数组确实是一个数组,但只包含一个条目:“25,1”。我解决了我的问题,采用params[:user_ids][0] 并用逗号分隔符将其拆分,循环遍历索引,并将每个用户保存到组关联中。我认为这不是一个很好的解决方案,并且仍然希望在不进行任何操作的情况下传递直接数组。
【问题讨论】:
-
有什么原因你没有使用某种
collection_check_boxes形式而不是 JS 吗?然后,ID 将实际作为 params 哈希中的数组发送,您可以使用内置方法进行保存等。有一些带有复选框的陷阱,但您只需要注意这些数据是如何传递的。
标签: javascript ruby-on-rails arrays ruby activerecord