Я пытаюсь разрешить массив с произвольным количеством значений, но Rails бросает Unpermitted parameter: service_rates
каждый раз. Я много пробовал (Rails 4 Unpermitted Parameters for Array, Unpermitted parameters for Dynamic Forms in Rails 4, ...), но ничего не работает.Параметр unpermitted для массива с динамическими ключами
Имя поля service_rates
и его тип столбца jsonb
.
Я хочу, чтобы создать объект JSON из произвольного числа полей ввода:
<%= 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 %>
Так мои данные POST
выглядит следующим образом:
project[service_rates][1] = 100
project[service_rates][2] = 95
project[service_rates][3] = 75
В настоящее время service_rates
разрешается через белый список с tap
:
def project_params
params.require(:project).permit(:field1, :field2, […], :service_ids).tap do |whitelisted|
whitelisted[:service_rates] = params[:project][:service_rates]
end
end
В le аст, я строю объект JSON в частной функции модели (которая выдает эту ошибку):
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
Я также попытался разрешить поле, как ...
params.require(:project).permit(:field1, :field2, […], :service_rates => [])
... и что ...
params.require(:project).permit(:field1, :field2, […], { :service_rates => [] })
... но это также не работает.
Когда я попробовать это ...
params.require(:project).permit(:field1, :field2, […], { :service_rates => [:id] })
... Я получаю это: Unpermitted parameters: 1, 3, 2
смог сбросить свой объект запроса (как это выглядит, прежде чем это Вы перешли к сильным параметрам?) Я столкнулся с этим в последнее время. –