Я пытаюсь создать форму, которая позволяет пользователю добавлять продукты в заказ.
До сих пор я настраивал его так, что пользователь выбирает из 2 раскрывающихся списков и вводит текст в одно текстовое поле. 1 - продукт, который они хотят 2 - его размер 3 - количество, которое они хотят.
Я надеюсь, что пользователь щелкнет тег link_to, чтобы «Добавить» этот элемент в свой заказ.
Я думал, что могу сделать это через ajax и создать ассоциативную запись в моем контроллере и отобразить ее на странице, когда запрос вернется.
Когда пользователь завершит свой заказ и нажмет "Отправить", я могу создать свой Заказ клиента с продуктами, которые он хочет купить.
Я правильно подхожу к этому?
например моя форма имеет следующее:
<%= collection_select :order_line_item, :cake_id, Cake.order(:name), :id, :<%= grouped_collection_select :order_line_item, :cake_size_id, Cake.all, :cake_sizes, :name, :id, :name %>
<%= label_tag :quantity %>
<%= text_field_tag :quantity %>
<%= link_to "Add to order", add_to_order_path, {method: :post, remote: true} %>
Я правильно подхожу к этому? Затем мне нужно иметь возможность добавить поля выше в сообщение ajax, чтобы я мог заполнить ассоциативную запись соответствующими значениями.
Ссылка работает, но теперь я пытаюсь опубликовать параметры для создания связанных записей, потому что мне нужно запросить БД для правильного FK
Am I approaching this correctly?
Не знаю насчет 'правильно'. Но я могу представить несколько альтернатив.
Вот несколько набросков:
Этот подход предполагает, что Order
уже сохранен, так что вы можете связать Product
с этим заказом. Возможно, у Order
есть status
.
remote: true
(если вы используете Rails 5, это может быть поведением по умолчанию).parameters
в вашем controller
, где вы можете связать Product
с Order
..on 'click'
(я предполагаю, что jquery, вы не указываете, поэтому я буду работать с ним) к оболочке.click
всплывает в оболочку.Я бы не рекомендовал этот подход, поскольку мне кажется, что вы в основном копируете функциональность удаленной формы. Но есть ...
При таком подходе нет требует, чтобы Order
уже существовал.
Order
.accepts_nested_attributes_for
, но я использую никогда.)Я подозреваю, что есть и другие. Или, возможно, вариации.
Что ж, у меня есть вложенная форма. Итак - Клиент заполняет имя и информацию (Модель клиента). Клиент выбирает дату для Заказа (Модель заказа). Затем Клиент выбирает из раскрывающегося списка элемент, размер и количество продукта, который он хочет. У заказа много line_items (модель OrderLineItem) <- Кнопка «Добавить» Я бы хотел создать объект ассоциации @customer для line_item динамически при каждом нажатии кнопки «Добавить»
Ваш еще один вариант подхода кажется мне лучшим. В основном я хочу, чтобы все было создано при отправке формы. За исключением того, что мне не хватает помощников по атрибутам rails (которые, я думаю, вы говорите, что вы не используете) для создания параметров моего имени. Например, если у меня есть пользователь, пытающийся добавить несколько продуктов, как мне однозначно идентифицировать? Возможно, объединив все значения полей для создания уникального идентификатора? Самое главное, поскольку я все еще изучаю рельсы, я хочу убедиться, что я иду правильным путем при построении этого типа модели - или это та часть рельсов, где вам нужно отклониться от курса?
Работает? Это было бы достойным показателем того, правильно ли вы приближаетесь к нему.