I'm trying to permit an array with an arbitrary number of values, but Rails throws Unpermitted parameter: service_rates every time. I tried a lot of things (Rails 4 Unpermitted Parameters for Array, Unpermitted parameters for Dynamic Forms in Rails 4, ...) but nothing works.
The field's name is service_rates and it's column type is jsonb.
I want to create a JSON object from an arbitrary number of input fields:
<%= f.hidden_field :service_ids, value: @services.map(&:id) %>
<% @services.each do |service| %>
  <tr>
    <td>
      <% value = @project.service_rates ? @project.service_rates["#{service.id}"]['value'] : '' %>
      <%= text_field_tag "project[service_rates][#{service.id}]", value, class: 'uk-width-1-1', placeholder: 'Stundensatz' %>
    </td>
  </tr>
<% end %>
So my POST data looks like this:
 project[service_rates][1] = 100
 project[service_rates][2] = 95
 project[service_rates][3] = 75
Currently service_rates is permitted via whitelisting with tap:
def project_params
  params.require(:project).permit(:field1, :field2, […], :service_ids).tap do |whitelisted|
    whitelisted[:service_rates] = params[:project][:service_rates]
  end
end
At least, I'm building a JSON object in a private model function (which throws this error):
class Project < ActiveRecord::Base
  before_save :assign_accounting_content
  attr_accessor :service_ids
  private
  def assign_accounting_content
    if self.rate_type == 'per_service'
      service_rates = {}
      self.service_ids.split(' ').each do |id|
        service_rates["#{id}"] = {
          'value': self.service_rates["#{id}"]
        }
      end
      self.service_rates = service_rates
    end
  end
end
I've also tried to permit the field like that …
params.require(:project).permit(:field1, :field2, […], :service_rates => [])
… and that …
params.require(:project).permit(:field1, :field2, […], { :service_rates => [] })
… but this doesn't work either.
When I try this …
params.require(:project).permit(:field1, :field2, […], { :service_rates => [:id] })
… I get this: Unpermitted parameters: 1, 3, 2
 
     
    