Добавление фотографии в модель has_many модели из вида - PullRequest
1 голос
/ 04 января 2009

У меня есть модель Thing, у которой есть has_many с ThingPhoto, использующий Paperclip для управления всем. В представлении «Thing» для Thing я хочу загрузить файл и связать его с моделью Thing.

По какой-то причине я совершенно не понимаю, как это сделать. Я пытался сделать это (Haml):

- form_for @thing.thing_photos, :html => {:multipart => true} do |f|
  = f.file_field :photo
  = f.submit

... и я получаю эту ошибку:

undefined method `array_path' for #<ActionView::Base:0x24d42b4>

Google подводит меня. Я уверен, что это очень легко, но я просто не могу обдумать это.

Редактировать: я должен был упомянуть, что если я изменю @ thing.thing_photos на просто @thing, он будет работать нормально, поскольку отображает форму, но, конечно, он не связан с правильной моделью.

Ответы [ 3 ]

1 голос
/ 04 января 2009

попробуй @thing.thing_photos.new

это должен экземпляр новой модели thing_photos. Если вы не используете вложенные маршруты, вам нужно добавить thing_id в качестве скрытого поля.

0 голосов
/ 16 января 2010

Форма должна быть для @thing_photo и должна либо передавать в thing_id, либо, если это вложенный маршрут, вы можете получить его из этого

тогда в вашем контроллере thing_photos

@thing_photo = Photo.new(params[:thing_photo])
#if using nested route
@thing = Thing.find(params[:thing_id])

#if using hidden field
@thing = Thing.find(params[:thing_photo][:thing_id])

if @thing_photo.save
  #this is what ties the thing photo to the thing
  @thing.thing_photos << @thing_photo
end

Если я правильно понимаю вопрос, это может помочь.

0 голосов
/ 04 января 2009

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

Это не совсем отвечает на ваш вопрос, но это может быть круто, чтобы посмотреть.

Но я держу пари, что ваша проблема связана с тем, что вы создаете форму для массива объектов (через ассоциацию). Могу поспорить, что что-то находит тип объекта (должен быть «thing_photo», но в вашем примере это «массив») и добавляет «путь» к нему, чтобы написать URL-адрес публикации формы. Возможно, вам следует добавить .first или создать частичное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...