Я пытаюсь сделать заявку на выставление счета. Вот мои модели, которые связаны с моим вопросом:
ОБНОВЛЕНИЕ: информация о модели изменилась из-за недавних предложений
Invoice
> id
> created_at
> sales_person_id
LineItem
> id
> invoice_id
> item_id
> qty_commit (inventory only)
> qty_sold
> price (because prices change)
> ...etc
Item
> barcode
> name
> price
> ...etc
Счет has_many items, :through => :line_items
. То же самое для Item. Что я хочу сделать, так это то, что при создании нового счета-фактуры я бы хотел, чтобы форма заполнялась всеми доступными элементами. Единственный раз, когда я не хочу, чтобы все элементы были заполнены, это когда я просматриваю счет-фактуру (поэтому должны быть получены только те элементы, которые существуют в таблице LineItems) В настоящее время - и, очевидно, - новый Счет не имеет предметов. Как мне перечислить их, если в коллекции ничего нет, и как заполнить форму? Также я хотел бы, чтобы все продукты были доступны при сбое создания (наряду с тем, что пользователь выбрал через форму).
ОБНОВЛЕНИЕ: я могу создавать элементы через контроллер с помощью следующего:
@ invoice = Invoice.new
# Заполните счет со всеми продуктами, чтобы их можно было выбрать
Item.where ("stock>?", 0) .each do | i |
@ Invoice.items.new (i.attributes)
конец
Это, конечно, моя грубая попытка делать то, что я хочу. Визуально это работает отлично, но, как и предсказывалось, мои идентификаторы форм и т.п. не очень хорошо работают, когда я на самом деле пытаюсь сохранить модель.
Ожидается LineItem (# 37338684), получен массив (# 2250012)
Пример формы:
# f is form_for
<% @ invoice.items.group_by {| p | p.category} .each do | категория, продукты | %>
<% = category.name%>
<% = f.fields_for: line_items do | line_item | %>
<% для р в продуктах%>
<% = line_item.hidden_field: tax_included,: value => p.tax_included%>
<% = p.name%>
$ <% = p.price%>
<% end%>
<% end%>
<% end%>