Форма для ассоциаций HABTM

У меня есть две модели: альбом и изображение. Они имеют ассоциации has_and_belongs_to друг с другом. В альбоме много изображений, а изображение может принадлежать многим альбомам. Правильно ли тогда указать HABTM?

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

  = simple_form_for [:admin, @album] do |a|
    = a.simple_fields_for :images do |i| 
      = i.input :title
      = i.file_field :image
      = i.submit

Но это просто обновляет альбом, а не создает изображение. Я также получил сообщение об ошибке «Ожидается изображение, получен массив».

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

Или .. Я думаю, у меня могла бы быть ссылка с надписью «добавить изображение», и при нажатии отображать частичное, скажем, image/_upload_form в модальном режиме? Однако это запасной план. Ищем решение для формы изображения на странице показа альбома. Спасибо.


person Joris Ooms    schedule 23.08.2014    source источник


Ответы (1)


Вы должны submit form, а не fields.

Этот код

= simple_form_for [:admin, @album] do |a|
    = a.simple_fields_for :images do |i| 
      = i.input :title
      = i.file_field :image
      = i.submit

должно быть

= simple_form_for [:admin, @album] do |a|
    = a.simple_fields_for :images do |i| 
      = i.input :title
      = i.file_field :image
    = a.submit #Here
person Pavan    schedule 23.08.2014
comment
@Mandeep Да, только собирался редактировать, потом увидел твою правку :) - person Pavan; 23.08.2014
comment
Это дает мне ошибку: «ActiveRecord::AssociationTypeMismatch», «ожидаемое изображение (# 70146303479620), получено массив (# 70146232389660)». - person Joris Ooms; 23.08.2014