Тег link_to в Rails для создания записи соединения в рельсах

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

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

Работает? Это было бы достойным показателем того, правильно ли вы приближаетесь к нему.

jvillian 02.05.2018 01:18

Ссылка работает, но теперь я пытаюсь опубликовать параметры для создания связанных записей, потому что мне нужно запросить БД для правильного FK

jimgug 02.05.2018 08:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
65
1

Ответы 1

Am I approaching this correctly?

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

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

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

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

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

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

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

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

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

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

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

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

Что ж, у меня есть вложенная форма. Итак - Клиент заполняет имя и информацию (Модель клиента). Клиент выбирает дату для Заказа (Модель заказа). Затем Клиент выбирает из раскрывающегося списка элемент, размер и количество продукта, который он хочет. У заказа много line_items (модель OrderLineItem) <- Кнопка «Добавить» Я бы хотел создать объект ассоциации @customer для line_item динамически при каждом нажатии кнопки «Добавить»

jimgug 02.05.2018 22:56

Ваш еще один вариант подхода кажется мне лучшим. В основном я хочу, чтобы все было создано при отправке формы. За исключением того, что мне не хватает помощников по атрибутам rails (которые, я думаю, вы говорите, что вы не используете) для создания параметров моего имени. Например, если у меня есть пользователь, пытающийся добавить несколько продуктов, как мне однозначно идентифицировать? Возможно, объединив все значения полей для создания уникального идентификатора? Самое главное, поскольку я все еще изучаю рельсы, я хочу убедиться, что я иду правильным путем при построении этого типа модели - или это та часть рельсов, где вам нужно отклониться от курса?

jimgug 06.05.2018 13:19

Другие вопросы по теме