Скрепка - прикрепление заметок к изображениям - PullRequest
1 голос
/ 24 марта 2011

Я новичок в paperclip и экспериментировал с некоторыми примерами в Интернете.

Я изучал учебное пособие «Загрузка нескольких изображений с помощью Rails и Paperclip» и смог создать модель альбома, которая можетесть много фотографий.

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

Первоея создал таблицу фотонотов и ее модель, а затем создал отношения между моделью «Фото» и моделью «Фотонот».

class Photo < ActiveRecord::Base
  belongs_to :album

  has_many :photonotes, :dependent => :destroy
  #accepts_nested_attributes_for :photonotes  

  def photonote_attributes=(photonote_attributes)
    photonote_attributes.each do |attributes|
    photonotes.build(attributes)
    end
 end

  has_attached_file :data,
  :styles => {
    :thumb => "50x50#",
    :large => "640x480#"
  }

  validates_attachment_presence :data
  validates_attachment_content_type :data, 
  :content_type => ['image/jpeg', 'image/pjpeg', 
                                   'image/jpg', 'image/png']
end

Я включил раздел fields_for в свой файл _photo.html.erb 'частичное, чтобы позволить пользователю добавить заметку к фотографии.

--- контроллер альбомов
def new @album = Album.new 1.upto (3) {photo = @ album.photos.build photo.photonotes.build} response_to do | format |format.html # new.html.erb format.xml {render: xml => @album} end end

Каждый раз, когда я создаю альбом и добавляю изображение с заметкой, я получаю следующее сообщение об ошибке: 'Что-то пошло не так! '...

Любое предложение приветствуется.Будучи новичком в RoR, извините, если этот вопрос выглядит глупо:)

Ответы [ 2 ]

2 голосов
/ 24 марта 2011

Вы почти там с acceptpts_nested_attributes_for. С моей головы ваша форма должна выглядеть примерно так.

= form_for @photo, :url => album_path(@album), :html => { :multipart => true } do |f|   
  = f.file_field :photo
  = f.fields_for :photonotes, @album.photo_notes.build do |f_pn|
    = f_pn.text_area :whatever_your_note_field_is_called

Кстати, пользователю потребуется загружать много заметок на фотографию? Если нет, то покончи с одним со многими и добавь поле к самой фотографии.

1 голос
/ 24 марта 2011
<% fields_for "album[photo_attributes][]", photo do |p| %>
  <p>
    <%= p.label :Photo %><br />
    <%= p.file_field :data, :index => nil %>


<% fields_for "photo[photonote_attributes][]", photonote do |builder| %>
<%= builder.text_field :note %>
<% end %>

  </p>
<% end %>

Выше приведен код, который я использовал, но он не работает ..

edit

Я думаю, что это должно быть примерно так:

<% fields_for "album[photo_attributes][photonote_attributes][]", photonote do |builder| %>
<%= builder.text_field :note %>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...