2009-12-30 5 views
0

Я пытаюсь создать объект опроса, который имеет много ответов. Каждый ответ может иметь прикрепленное изображение. Как создать форму, которая позволяет мне ввести вопрос и добавить переменное количество ответов (каждое со своим прикрепленным изображением). Я также предпочел бы, чтобы разрешить предварительный просмотр загруженных изображений.Многомодельные формы с загрузкой изображений

Моей идеей до сих пор является наличие подформы для каждого изображения, которое автоматически загружается в обработчик предварительного просмотра для каждого добавленного вопроса.

Мой другой подход состоял в том, чтобы создать объект вопроса в сеансе и добавить к нему объекты ответа, а затем сохранить их все одновременно. Я не совсем уверен, как это сделать в рельсах. Я использую paperclip для загрузки изображений.

Я немного новичок в рельсах, поэтому любые советы будут оценены.

ответ

1

Как насчет разделения ответов опроса от части загрузки изображения?

Таким образом вы можете создать основную форму, содержащую несколько ответов, а затем для каждого созданного ответа у вас будет форма с полем для загрузки и вам не придется иметь дело с несколькими загрузками, и это намного проще.

Вы можете легко скрыть (style = "display: none") формы загрузки и показать их ссылкой, например "Загрузить изображение" (onclick = "$ ('# link_id'). Show()")

Я рекомендую вам не использовать сеанс для хранения этих сведений, потому что предыдущие (кнопки) браузеров будут испорчены.

1

Я настоятельно рекомендую вам прочитать эти две статьи о вложенных атрибутов и вложенных моделей:

Если вы хотите создать опрос с большим количеством ответов, используя это единственная форма, это путь.

Вы можете сначала спросить, сколько ответов будет иметь опрос, а затем повторите много раз по вашему звонку fields_for.

Однако лучшим подходом было бы иметь «добавить» и «удалить» ссылки, чтобы вы могли изменять количество ответов inline. Я хотел бы сделать это с помощью AJAX - так что вы можете иметь link_to_remote для вас ссылку «Добавить», который вызывает метод контроллера, который делает что-то вроде этого:

render :update do |page| 
    page.insert_html :bottom, 'answers-list', :partial => 'answer' 
end 

И, конечно, для вашей «удалить» ссылку вы используете page.remove для удалите соответствующую часть формы.

Это должно заставить вас начать все равно.

+0

Я прочитал эти статьи и планирую использовать вложенные атрибуты для реализации формы, но это не решает проблему многопользовательской загрузки. Я склоняюсь к использованию этих методов для создания формы, но пользователи загружают изображения на втором этапе. Я обеспокоен тем, что это неоптимальный пользовательский интерфейс. Особенно, когда изображение часто будет точкой. – midas06