Просто думать о лучшем способе построить форму заказа, которая бы (с пользовательской точки зрения):Форма с динамическим числом элементов
- Разрешить добавление нескольких элементов.
- Каждый элемент имеет раскрывающийся список «Имя», «Тип задания» и «Загрузка файла».
- Пользователь может добавлять или удалять элементы.
- Пользователь должен указать хотя бы один элемент.
- Все элементы должны быть подтверждены (например: имя, тип JobType и файл).
- Когда он нажимает кнопку «Отправить», заказ должен быть создан со всеми элементами в нем.
Так модель выглядит следующим образом: User -1---*-Order-1---*- OrderItem-*--1-JobType
. Дополнительно OrderItem включает в себя количество атрибутов, скажем name
, file
.
Теперь я хотел бы иметь как тощий контроллер, насколько это возможно. Лучше с «стандартным» кодом, как:
class OrdersController < ApplicationController
def create
@order = Order.new(params[:order])
if @order.save
redirect_to account_url
else
flash.now[:error] = "Could not save Order"
render :action => "new"
end
end
end
Самым интересным этим как вид должны выглядеть так, что рельсы автоматически связывает все значения, размещенные на правильные объекты?
На данный момент я не беспокоюсь о деградации от JavaScript, а скорее о шаблоне для добавляемых элементов и связывании всего с валидацией (возможно, как частичное).
Я ожидаю, что шаблон будет выглядеть ниже, но не уверен.
<input type='text' name='order[order_items[name[]]][]' />
<select name='order[order_items[job_type[]]][]'>...</select>
<input type='file' name='order[order_items[file[]]][]' />
Я должен клонировать этот шаблон для добавления элемента с помощью JS.
Таким образом, ответ должен:
- Включить вид или его часть, которая демонстрирует:
- исправить связывание почтовых значений;
- правильная валидация для всех предметов;
- Включить связанную часть модели.
- Включите изменения в контроллер ЕСЛИ и ТОЛЬКО ЕСЛИ необходимо.
- (JavaScript не требуется)
В идеале я хотел бы увидеть образец, если кто-нибудь знает один (может быть, где-то на GitHub).
И последнее примечание, , пожалуйста,, проверьте свои решения перед публикацией.
Thanks,
Dmitriy.
Тони, мне жаль, что я чувствую, что хочу, чтобы кто-то сделал для меня работу. У меня не было такого намерения. Я просто хотел избежать возможных предположений о ответе и просто получить четкие. Такой ответ твой. Понятно, что на самом деле он дает точный ответ, который я ожидаю - рельсы 196 (и 197). Большое спасибо. –