You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rails表单中传递字符串数组?邮件数组传递问题求助

解决Rails表单传递邮件数组的问题

你的问题出在表单字段的命名逻辑上:fields_for :members会生成单个members[email]的字段名,循环里的所有复选框都复用这个名称,导致提交后只有一个值被保留。要传递数组,需要让每个复选框的字段名符合Rails的数组参数格式。

解决方案:修改表单字段命名

直接手动构建复选框的name属性为event[members][][email],这样选中的邮件会被打包成数组提交:

<div class="field">
  <% @group.list_accepted.each do |part| %>
    <% user = User.find(part.user_id) %>
    <%= label_tag "event[members][][email]", user.username %>
    <%= check_box_tag "event[members][][email]", user.email, false %>
    <br>
  <% end %>
</div>

优化建议:避免视图中的数据库查询

不要在视图里直接调用User.find,会引发N+1查询性能问题。建议在控制器中预加载关联数据:

# 控制器代码
@group = Group.find(params[:group_id])
@group.list_accepted.includes(:user) # 预加载user关联对象

之后视图可以直接使用关联对象:

<div class="field">
  <% @group.list_accepted.each do |part| %>
    <%= label_tag "event[members][][email]", part.user.username %>
    <%= check_box_tag "event[members][][email]", part.user.email, false %>
    <br>
  <% end %>
</div>

强参数配置保持不变

你的强参数写法是正确的,无需修改:

params.require(:event).permit(:title, :description, :user_id, :group_id, :start_date, :end_date, members: [:email])

提交后,params[:event][:members]会变成包含多个{email: "xxx"}哈希的数组,完全符合你需要的数组类型属性要求。

内容的提问来源于stack exchange,提问作者Alessia Volpi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:28:01