【发布时间】:2015-07-21 10:49:00
【问题描述】:
我试图允许具有任意数量值的数组,但 Rails 每次都会抛出 Unpermitted parameter: service_rates。我尝试了很多东西(Rails 4 Unpermitted Parameters for Array,Unpermitted parameters for Dynamic Forms in Rails 4,...),但没有任何效果。
字段名称为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
至少,我正在私有模型函数中构建一个 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
【问题讨论】:
-
你能转储你的请求对象吗(它在传递给强参数之前的样子?)我最近遇到了这个。
标签: ruby-on-rails ruby-on-rails-4