Rails的PARAMS回报为零更新模型的hash属性时

问题描述 投票:0回答:1

我有我叫Admin应用程序中的典范。

Admin可以有多个电子邮件和这些电子邮件存储在一个名为emails哈希内。例如,

{"sales"=>{"general"=>"[email protected]"},"support"=>{"general"=>"[email protected]"}}

当创建一个表单来访问这些特定的电子邮件,我能够得到的输入中出现的每个单独的电子邮件,但是当我尝试更新的模式,没有什么变化我的admin_params[:emails]nil

下面是我的edit.html.erb文件中我的表格:

<%= form_for @admin do |f| %>
    <dt class="col-sm-10">Admin Emails</dt>
    <%  @admin.emails.each do |type, subtype|%>
          <dt class="col-sm-10"> <%= f.label type %> </dt>
          <% if @admin.emails.include?(type) %>
            <% @admin.emails[type].each do |subtype_label, subtype_email| %>
              <%= f.fields :emails do |field| %>
                <dd class="col-sm-5"><%= field.label subtype_label %></dd>
                <dd class="col-sm-5"><%= field.text_field subtype_label, :value => subtype_email %></dd>
              <% end %>
            <% end %>
          <% end %>
    <% end %>

这里是除了指数的任何其他方法之前调用该方法set_admin:

def admin_params
  params.require(:admin).permit(:name, :emails)
end

这里是我的更新方法:

def update
  binding.pry
  @admin.update(
    name: admin_params[:name],
    emails: admin_params[:emails]
  )

  redirect_to admin_path(@admin)
end

最后,这里是获取呈现在特定的输入HTML:

<input value="emails" type="text" name="admin[emails][general]" id="admin_emails_general">

任何线索,我的问题是什么?在这一个被抓我的头一整天。

ruby-on-rails hash textfield strong-parameters form-helpers
1个回答
0
投票

我认为只是做了简单的导轨方式:

class Admin < ApplicationRecord
  has_many :emails, dependent: :destroy
  accepts_nested_attributes_for :emails, 
    reject_if: proc { |attributes| attributes['email'].blank? }
end

class Email < ApplicationRecord
  enum type: [:work, :home]
  belongs_to :admin
end

这只是一个普通的老一个一对多的关联和qazxsw POI。

accepts_nested_attributes_for

<%= form_for(@admin) do |f| %> <%= f.fields_for :emails do |ef| %> # ... <%= ef.select :type, Email.types.keys.map {|k| [k.humanize, k] } %> <%= ef.text_field :email %> <% end %> # ... <% end %> 通过命名输入fields_foradmin[emails_attributes][][email]会在参数散列的阵列。

您的解决方案覆盖了同一个参数。虽然可以通过手动设置名称解决此破解属性我会考虑它是否值得努力。

白名单嵌套参数传递与要列入白名单的数组中的键:

admin[emails_attributes][][type]
© www.soinside.com 2019 - 2024. All rights reserved.