【问题标题】:How to permit array of strong parameter value with form fields RAILS 4如何使用表单字段 RAILS 4 允许强参数值数组
【发布时间】:2015-03-25 15:44:56
【问题描述】:

我有一个邀请系统,其中有一个电子邮件字段,人们可以向其中添加新用户电子邮件。

目前这接受 1 封电子邮件,我想让用户能够动态添加新的附加电子邮件字段,所以当它提交时,我有一个由 rails strong 参数允许的电子邮件地址数组

这是视图模板

<%= form_for @invite, :url => landlord_property_invites_path(@landlord.id,@property.id) do |f| %>
    <div class="form-group">
      <%= f.label :email %>
      <%= f.email_field :email ,class: "form-control"%>
    </div>
    <span class="btn btn-default btn-addon">Add another tenant</span>
    <%= f.submit 'Send Email',class:"btn btn-success" %>
<% end %>

这是我的邀请参数

  private
  def invite_params
    params.require(:invite).permit(:email)
  end

所以我想做的是,当他们点击add another tenant

那么表格将如下所示

<%= form_for @invite, :url => landlord_property_invites_path(@landlord.id,@property.id) do |f| %>
    <div class="form-group">
      <%= f.label :email %>
      <%= f.email_field :email ,class: "form-control"%>
    </div>     
    <div class="form-group">
      <%= f.label :email %>
      <%= f.email_field :email ,class: "form-control"%>
    </div>
    <span class="btn btn-default btn-addon">Add another tenant</span>
    <%= f.submit 'Send Email',class:"btn btn-success" %>
<% end %>

所以基本上:email 参数将映射到表单中所有字段的数组,如下所示,

:email = {useremail@gmail.com, useremail2@gmail.com}

然后我可以在控制器中的 for each 循环中单独执行操作

目前,参数接受电子邮件字段中的最后一个值并忽略其余值

我试过了

    params.require(:invite).permit(email:[]) and
    params.require(:invite).permit(:email => [])

但它仍然做同样的事情。

那么我将如何允许 params 接受传入的哈希值??

【问题讨论】:

  • 你不能那样使用表单助手。当您告诉 ruby​​ “f.email_field :email”时,rails 将查找名为 email 的活动记录属性。在这种情况下, f 是 @invite。所以你说的是“@invite.email = ”。
  • 嗯,是的,我想是的,我是说,电子邮件是否获得了表单中 :email 的所有值,我还能做什么?
  • 我认为你可以使用带有fields_for的表单助手guides.rubyonrails.org/form_helpers.html#using-form-helpers

标签: ruby-on-rails forms ruby-on-rails-4 strong-parameters


【解决方案1】:

我想通了,

这就是我要放在视图模板中的内容

    <%= email_field_tag 'email[]' %>
    <%= email_field_tag 'email[]' %>

它必须是一个没有 f 的标签。对象

我允许它通过

  def invite_params
   params.permit(email:[])
 end

并用这个访问它

    @emails = invite_params['email']

这会给我

@email = ['email1@gmail.com,email2@gmail.com']

这是我使用的链接

Saving value with same input field in form

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 2017-09-14
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2015-12-13
    • 2023-03-15
    • 2017-02-11
    相关资源
    最近更新 更多