генерация вложенных ресурсов активного администратора - PullRequest
0 голосов
/ 27 ноября 2018

Я могу сгенерировать требуемый макет для вложенной формы атрибута, как показано ниже:

form layout I want

Код для вложенной формы:

f.inputs 'Line Item/s' do
    f.has_many :payment_line_items, heading: false do |form|
      table do
        tr do
          th 'Description'
          th 'Qty'
          th 'Unit Price'
          th 'Amount'
        end
        tr do
          td {form.input :description, label: false}
          td {form.input :quantity, label: false}
          td {form.input :unit_price, label: false}
          td {form.input :amount, label: false}
        end
      end
    end
  end

Когда я нажимаю на кнопку «Добавить новую строку платежа», я получаю что-то вроде этого изображения:

after adding the line item

Я просто хочу скопировать всю таблицу или просто tr с частью формыкогда я нажимаю кнопку «Добавить новую строку платежной позиции».Как мне это сделать?

1 Ответ

0 голосов
/ 03 декабря 2018

У меня была похожая проблема в одном из моих проектов activeadmin.Элемент fieldset использует элементы li, которые можно стилизовать.Так что проверьте класс, который использует форма, и затем добавьте что-то вроде этого в конец app/assets/stylesheets/active_admin.scss.Здесь я предполагаю, что класс css для окружающей формы равен line_items.Уловка - это свойство inline-block элемента li, однако вам, возможно, придется поработать со свойствами css.

form.line_items fieldset.has_many_fields ol > li > label { display: none; }
form.line_items fieldset.has_many_fields:first-child ol > li > label { display: block; }
form.line_items fieldset.has_many_fields ol > li { display: inline-block; padding: 5px; width: 18%; float:left;}
form.line_items fieldset.has_many_fields ol > li.has_many_delete { margin-top:20px; margin-left: -36px;}
form.line_items fieldset.has_many_fields ol > li > label { width: auto; padding-right: 10px;}
form.line_items fieldset.has_many_fields ol > li > div > label.label { width: auto; padding-right: 10px;}
form.line_items fieldset.has_many_fields ol > li > a.has_many_remove { margin-top:20px; }
form.line_items fieldset.has_many_fields ol > li > p.inline-errors { margin: 0.3em 0 0 0; }

Это сработает, но вам придется переписать форму следующим образом:

  f.inputs 'Line Item/s' do
    f.has_many :payment_line_items, heading: false do |form|
      form.input :description, label: false
      form.input :quantity, label: false
      form.input :unit_price, label: false
      form.input :amount, label: false                    
    end
  end

Если вы хотите, чтобы пользователь мог уничтожать позиции, вам необходимо настроить свои ассоциации и allow_params для него следующим образом:

В вашей модели

accepts_nested_attributes_for :line_items, :allow_destroy => true

А в блоке реестра activeadmin:

permit_params \
  :line_items_attributes => [:id, :description, :quantity, :unit_price, :amount, :_destroy]

Удачи!

...