Извлекать параметры из контроллера при вложении атрибутов на 2 уровня - PullRequest
0 голосов
/ 24 сентября 2018

Моя Pack модель имеет строки, которые в свою очередь содержат элементы, а упаковка и строки принимают вложенные атрибуты для коллекции, которую они содержат.

Вот модели:

Class Pack < ApplicationRecord
   has_many :pack_lines, dependent: :destroy
   accepts_nested_attributes_for :pack_lines, allow_destroy: true
end

Class PackLine < ApplicationRecord
   belongs_to :pack
   has_many :pack_line_items, dependent: :destroy
   accepts_nested_attributes_for :pack_line_items, allow_destroy: true
end

Class PackLineItem < ApplicationRecord
   belongs_to :pack_line
end

Мне потребовалось много времени, чтобы найти правильный синтаксис для использования permit вложенных вложенных параметров в моем контроллере.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Вы можете разрешить вложенные атрибуты следующим образом.

params.require(:pack).permit(
  :name,
  pack_lines_attributes: [
    :id, :_destroy, pack_line_items_attributes: [
         :id, :_destroy
    ]
  ]
)

Они работают аналогично для has_many и has_one.Возможно, вам придется использовать сингулярность в случае has_one как pack_line_attributes [:id]

0 голосов
/ 24 сентября 2018

После долгих размышлений и чтения документов вот что я придумал:

# In controllers/packs_controller.rb
def pack_params
   params.require(:pack).permit(
      :name,
      pack_lines_attributes: [
         :id,
         :_destroy,
         {
           pack_line_items_attributes: [
             :id,
             :_destroy
           ]
         }
      ]
   )
end

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

...