У меня есть приложение Rails4, использующее PG hstore.

Это из консоли:

enter image description here

Это контроллер автомобиля:

    def vehicle_params
      params.require(:vehicle).permit(:description, :stufftype_id, :name, :tenant_id, :count, :manufacturer, :man_date, :purchase_date, :purchase_price, :current_price, :warranty_date, :model, :notes, :site_id, :sell, :loaned, :borrowed, :sell_to, :borrowed_from, :sale_id, :sale_price, :sold_amount, :sold, :archive, :vendor_id, :loaned_to, :data)
    end

Он содержит :data

Итак, почему данные являются недопустимым параметром?

Спасибо за помощь!

1
Reddirt 20 Авг 2014 в 18:16

1 ответ

Лучший ответ

Когда вы разрешаете :data в своих строгих параметрах, это разрешает только скалярное значение.

Скалярные значения могут быть типа String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Date, Time, DateTime, StringIO, IO, ActionDispatch::Http::UploadedFile и Rack::Test::UploadedFile, как описано в документации по строгим параметрам:

https://github.com/rails/strong_parameters#permitted-scalar-values

Это означает, что передача Hash для :data в хэше params не будет разрешена как есть.

Вы ищете способ разрешить вложенные параметры. Также описано в документации:

https://github.com/rails/strong_parameters#nested-parameters

И если ваши ключи hstore являются динамическими, вы можете сами занести динамический хэш в белый список, используя метод, описанный в следующем вопросе SO:

рельсы 4 сильных параметра + динамические ключи hstore

Надеюсь, это поможет.

2
Community 23 Май 2017 в 15:09
Спасибо - я использовал ответ rails 4 strong params + dynamic hstore keys.
 – 
Reddirt
20 Авг 2014 в 19:05