Q:

Rails nested attributes not found / not permitted

I've been trying to enter nested attributes into my database but I can't manage to get it working.
I have these parameters:
def domain_register_whois_contact_parameters
  params.require(:domain).permit( whois_contacts_attributes: [:id, :first_name, :last_name, :street, :number, :postal_code, :city, :phone_number, :email_address, :company_type_id, :company_kvk, :company_name, :country_id])
end

These the input params:

{"utf8"=>"✓",
 "authenticity_token"=>"P4WTxAHKLgeRUQq60JvD/uMjo0s2BdMtqlBr1B6Z2hQ=",
 "domain"=>{"domain_name"=>"test.com",
 "whois_contacts_attributes"=>{"0"=>{"first_name"=>"Edward",
 "last_name"=>"Doe",
 "street"=>"Broadway",
 "number"=>"1",
 "postal_code"=>"1234AB",
 "city"=>"Amsterdam",
 "country_id"=>"205",
 "phone_number"=>"316123465",
 "email_address"=>"email@email.com",
 "company_name"=>"",
 "company_kvk"=>"",
 "company_type_id"=>""}},
 "nameserver_first"=>"ns1.dns.com",
 "nameserver_second"=>"ns2.dns.com"},
 "commit"=>"Register domain"}

I'm getting errors like this:
param not found: whois_contacts_attributes
Have Googled lots of examples, but it doesn't work.
In my model I have:
accepts_nested_attributes_for :whois_contacts

And my view:
<%= f.simple_fields_for :whois_contacts, @domain.whois_contacts.new do |wc| %>
    <%= wc.input :first_name, input_html: { placeholder: "John" } %>
    <%= wc.input :last_name, input_html: { placeholder: "Doe" } %>

    <%= wc.input :street, input_html: { placeholder: "Main street" } %>
    <%= wc.input :number, input_html: { placeholder: "1" } %>
    <%= wc.input :postal_code, input_html: { placeholder: "1234AB" } %>
    <%= wc.input :city, input_html: { placeholder: "Amsterdam" } %>

    <div class="form-group select required domain_country_country_name">
        <label class="select required form-label" for="domain_country_country_name">
            <abbr title="required">*</abbr> Country
        </label>
        <div class="controls">
            <%= wc.collection_select :country_id, Country.all, :id, :full_name, {}, {:class=>'select required form-control'} %>
        </div>
    </div>

    <%= wc.input :phone_number, input_html: { placeholder: "0612345678" } %>
    <%= wc.input :email_address, input_html: { placeholder: "doe@johndoe.com" } %>

    <h3>Company information</h3>
    <%= wc.input :company_name, hint: 'If you have a company, please enter the company name.', input_html: { placeholder: "Doe Inc." } %>
    <%= wc.input :company_kvk, hint: 'Enter Chamber of Commerce (Kvk) number', input_html: { placeholder: "12345678" } %>

    <div class="form-group select required domain_company_company_name">
        <label class="select required form-label" for="domain_company_companyname">
            <abbr title="required">*</abbr> Company
        </label>
        <div class="controls">
            <%= wc.collection_select :company_type_id, CompanyType.all, :id, :full_name, {}, {:class=>'select required form-control'} %>
        </div>
    </div>
<% end %>

A:

There are 3 things I would do differently.
1 Build your record in the controller
def new
  @domain = Domain.new
  @domain.whois_contacts.build
end

2 Whitelist on the same method call
def domain_params
  params.require(:domain).permit(:domain_name, :nameserver_first, :nameserver_second, whois_contacts_attributes: [:id, :first_name, :last_name, :street, :number, :postal_code, :city, :phone_number, :email_address, :company_type_id, :company_kvk, :company_name, :country_id])        
end

3 Adjust the form for better build statement
<%= f.simple_fields_for :whois_contacts do |wc| %>
  <%= wc.input :first_name, input_html: { placeholder: "John" } %>
  <%= wc.input :last_name, input_html: { placeholder: "Doe" } %>

  <%= wc.input :street, input_html: { placeholder: "Main street" } %>
  <%= wc.input :number, input_html: { placeholder: "1" } %>
  <%= wc.input :postal_code, input_html: { placeholder: "1234AB" } %>
  <%= wc.input :city, input_html: { placeholder: "Amsterdam" } %>

  <div class="form-group select required domain_country_country_name">
    <label class="select required form-label" for="domain_country_country_name">
      <abbr title="required">*</abbr> Country
    </label>
    <div class="controls">
      <%= wc.collection_select :country_id, Country.all, :id, :full_name, {}, {:class=>'select required form-control'} %>
    </div>
  </div>

  <%= wc.input :phone_number, input_html: { placeholder: "0612345678" } %>
  <%= wc.input :email_address, input_html: { placeholder: "doe@johndoe.com" } %>

  <h3>Company information</h3>
  <%= wc.input :company_name, hint: 'If you have a company, please enter the company name.', input_html: { placeholder: "Doe Inc." } %>
  <%= wc.input :company_kvk, hint: 'Enter Chamber of Commerce (Kvk) number', input_html: { placeholder: "12345678" } %>

  <div class="form-group select required domain_company_company_name">
    <label class="select required form-label" for="domain_company_companyname">
      <abbr title="required">*</abbr> Company
    </label>
    <div class="controls">
      <%= wc.collection_select :company_type_id, CompanyType.all, :id, :full_name, {}, {:class=>'select required form-control'} %>
    </div>
  </div>
<% end %>

