[url]http://infrastacks.com/?p=57[/url]
The “Add Photo” function lets us dynamically add more photo fields to our form without having to make a trip to the server. This can be helpful from a performance point of view but quite useless if the client has javascript disabled. We’re going to move forward on the assumption that this is not the case. With this complete, lets create the photo partial like so:
<% @album.photos.each do | photo | %>
<div class="album_photos">
<%= image_tag(photo.data.url(:thumb), :alt => '') %>
<%= check_box_tag "photo_ids[]", photo.id %>
</div>
<% end unless @album.photos.first.new_record? rescue nil %>
<div id="photos">
<%= render :partial => 'photo', :collection => @album.photos %>
</div>
<%= link_to_function "Add Photo" do |page|
page.insert_html :bottom, :photos, :partial => 'photo', :object => Photo.new
end %>
The “Add Photo” function lets us dynamically add more photo fields to our form without having to make a trip to the server. This can be helpful from a performance point of view but quite useless if the client has javascript disabled. We’re going to move forward on the assumption that this is not the case. With this complete, lets create the photo partial like so:
<div class="photo">
<% fields_for "album[photo_attributes][]", photo do |p| %>
<p>
<%= p.label :Photo %><br />
<%= p.file_field :data, :index => nil %>
<%= link_to_function "delete", "remove_field($(this), ('.photo'))" %>
</p>
<% end %>
</div>
<% @album.photos.each do | photo | %>
<div class="album_photos">
<%= image_tag(photo.data.url(:thumb), :alt => '') %>
<%= check_box_tag "photo_ids[]", photo.id %>
</div>
<% end unless @album.photos.first.new_record? rescue nil %>
#application.js
function remove_field(element, item) {
element.up(item).remove();
}