回形针 - 将注释附加到图像上

时间:2011-03-24 11:25:31

标签: ruby-on-rails

是回形针的新手,并且一直在网上试验一些例子。

我一直在关注“使用Rails和Paperclip上传多个图像”的教程,并设法创建一个可以有很多照片的相册模型。

现在我希望用户为每张照片添加备注,以便每次用户上传照片时,他还可以在该照片旁边添加备注。

我做的第一件事就是创建一个photonotes表及其模型,然后创建'Photo'模型和'Photonote'模型之间的关系。

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

我在'_photo.html.erb'部分中添加了fields_for部分,以允许用户在照片中添加注释。

---专辑控制器
     def new       @album = Album.new       1.upto(3){photo = @ album.photos.build                   photo.photonotes.build}       respond_to do | format |         format.html#new.html.erb         format.xml {render:xml =&gt; @album}       结束      端

每次我创建一个相册并添加带有注释的图像时,我会收到以下错误消息: “出了问题!”......

任何建议都是最受欢迎的。对RoR不熟悉,对不起,如果这个问题有点愚蠢:)

2 个答案:

答案 0 :(得分:2)

你接近使用accepts_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 :(得分:1)

<% 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 %>

以上是我使用的代码,但它不起作用..

修改

我认为它应该是这样的:

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