2010-03-05 2 views
3

Просто думать о лучшем способе построить форму заказа, которая бы (с пользовательской точки зрения):Форма с динамическим числом элементов

  • Разрешить добавление нескольких элементов.
  • Каждый элемент имеет раскрывающийся список «Имя», «Тип задания» и «Загрузка файла».
  • Пользователь может добавлять или удалять элементы.
  • Пользователь должен указать хотя бы один элемент.
  • Все элементы должны быть подтверждены (например: имя, тип 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.

ответ

5

Не отвечая на вопрос прямо, но вот некоторые источники, чтобы получить Вас там:

На личной ноте. На ваш вопрос возникает вопрос о том, чтобы кто-то выполнял вашу работу за вас. Я бы с радостью выложил ответ, чтобы охватить все ваши потребности, если бы я был на часах.

+2

Тони, мне жаль, что я чувствую, что хочу, чтобы кто-то сделал для меня работу. У меня не было такого намерения. Я просто хотел избежать возможных предположений о ответе и просто получить четкие. Такой ответ твой. Понятно, что на самом деле он дает точный ответ, который я ожидаю - рельсы 196 (и 197). Большое спасибо. –

Смежные вопросы