是回形针的新手,并且一直在网上试验一些例子。
我一直在关注“使用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不熟悉,对不起,如果这个问题有点愚蠢:)
答案 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 %>