Способ, которым я пользуюсь:
У меня есть свойства, в которых много фотографий (10 в случае).Переход к коду:
В контроллере свойств:
def new
@search = Property.search(params[:search])
@property = Property.new
10.times { @property.photos.build }
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @property }
end
end
# GET /properties/1/edit
def edit
@search = Property.search(params[:search])
@property = Property.find(params[:id])
# Se o usuário atual for dono da propriedade
if current_user.id == @property.user_id
@photos = Photo.where("property_id = ?", @property.id)
@N = @photos.count
@N = 10-@N
@N.times { @property.photos.build }
else
render :action => "show"
end
end
10.times "рендерит" 10 раз поле фотографии в поле зрения. При редактированииПриложу фото полей налево.Например: в первый раз я загрузил 3 фотографии, затем, если я хочу загрузить больше, появятся только 7 полей.
В модели свойств у меня есть:
class Property < ActiveRecord::Base
attr_accessible :photos_attributes, :logradouro, :complemento, :wc, :negocio, :cep, :vagas, :valor,
:quartos, :uf, :area, :bairro, :suites, :salas, :numero, :cidade, :descricao,
:status, :tipoImovel
has_many :photos
accepts_nested_attributes_for :photos, :allow_destroy => true
end
Это позволяетфотографии для загрузки.
Фотомодель:
class Photo < ActiveRecord::Base
belongs_to :property
has_attached_file :photo, :styles => { :small => "100x100>", :medium => "530>x530", :large => "800x800>" }
validates_attachment_presence :photo
validates_attachment_size :photo, :less_than => 500.kilobytes
end
В моем виде частично:
<div id="new_up">
<%= f.fields_for :photos do |p| %>
<% if p.object.new_record? %>
<p><%= p.file_field :photo %>
<%= p.radio_button :miniatura, true -%>
</p>
<% end %>
<% end %>
</div>
<div id="old_up">
<h4>Imagens Atuais</h4>
<% f.fields_for :photos do |p| %>
<% unless p.object.new_record? %>
<div style="float: left;">
<%= p.radio_button :miniatura, true -%>
<%= link_to image_tag(p.object.photo.url(:small)), p.object.photo.url(:original) %>
<%= p.check_box :_destroy %>
</div>
<% end %>
<% end %>
</div>