rails тег link_to для создания записи соединения в rails - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать форму, позволяющую пользователю добавлять товары в заказ.

Пока я настроил его так, что пользователь выберет 2 выпадающих списка и наберет 1 текстовое поле. 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, чтобы я мог заполнить ассоциативную запись соответствующими значениями.

1 Ответ

0 голосов
/ 02 мая 2018

Правильно ли я подхожу к этому?

Я не знаю о 'правильно' . Но я могу представить некоторые альтернативы.

Вот несколько набросков:

Один вариант:

Этот подход предполагает, что Order уже сохранен, так что вы можете связать Product с этим заказом. Возможно Order имеет status.

  • Вы можете обернуть весь этот бит (продукт, размер, количество) в свою собственную форму (не встроенную в форму заказа).
  • Пусть форма будет отправлена ​​через js с использованием remote: true (если вы используете Rails 5, это может быть поведение по умолчанию).
  • Когда пользователь нажимает «Добавить», вы получите значения полей как parameters в вашем controller, где вы можете связать Product с Order.
  • Затем верните HTML-блоб, который можно вставить в DOM (возможно, строку заказа?)
  • Используйте js, чтобы вставить блоб и очистить форму.

Другой вариант:

  • Вы можете оставить весь этот бит (продукт, размер, количество) не как форму и оставить его вне вашей формы.
  • Заверните все в деление.
  • Преобразуйте эту ссылку в span или что-то подобное.
  • Прикрепите событие .on 'click' (я предполагаю, что jquery, вы не укажете, поэтому я буду работать с ним) к оболочке.
  • При нажатии на ссылку событие click будет всплывать в оболочке.
  • Пусть оболочка отправит значения полей через ajax.
  • Действуйте, как указано выше.

Я бы не стал рекомендовать этот подход, так как мне кажется, что вы в основном копируете функциональность удаленной формы. Но есть ...

Еще один вариант

Этот подход не требует, чтобы Order уже существовал.

  • У вас может быть скрытая строка заказа за пределами вашей формы.
  • Вы создаете свою страницу, как указано выше в Другой вариант .
  • Теперь, когда пользователь нажимает кнопку «Добавить», клонируйте строку скрытого элемента заказа.
  • Заполните клонированную позицию заказа соответствующими значениями.
  • Вставьте клонированный товар в форму Order.
  • Когда пользователь нажимает «Заказать» или «Отправить», или что бы они ни нажимали, когда он сделан, вы получаете все строки заказа в виде наборов полей.
  • Обработка позиций заказа вместе с формой. (Некоторые люди могут предложить accepts_nested_attributes_for, но я никогда не использую это.)

Я подозреваю, что есть и другие. Или, возможно, вариации.

...