2013-12-04 3 views
1

Я новичок в Ruby on Rails. Я пытаюсь загрузить несколько изображений с помощью paperclip. У меня есть три модели * Award * Альбом * ФотоЗагрузка нескольких изображений с помощью paperclip

Я следующие отображения

В награду модели у меня есть

has_one :album 

В модели альбома я имею

has_many :photos 
belongs_to :award 

На фото модели у меня есть

belongs_to :album 

поэтому, когда я создаю новую награду, у нее будет альбом, и у альбома будет много фотографий. Я использую paperclip в фото модели.

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

Award модель


модель
class Award < ActiveRecord::Base 
    attr_accessible :album_id, :award_title, :description, :receiving_date 

    #mappings 
    has_one  :album 

    #validate presence of fields 
    validates_presence_of :album_id,:title,:description,:receiving_date 

    #validate that description has minimum length 3 
    validates_length_of :description, :minimum => 3 

    #validates that title has length >=3 
    validates_length_of :title, :minimum => 3 

end 

Альбом


class Album < ActiveRecord::Base 
    attr_accessible :description, :title, :award_id 

    #mappings 
    has_many :photos 
    belongs_to :award 

    #validate presence of fields 
    validates_presence_of :award_id,:title,:description 

    #validate that title has minimum length 3 
    validates_length_of :title, :minimum => 3 

    #validate that description has minimum length 10 
    validates_length_of :description, :minimum => 10 

end 

Фотомодель


class Photo < ActiveRecord::Base 
    attr_accessible :album_id, :image_url 

    #mappings 
    belongs_to :album 

    #validate presence of fields 
    validates_presence_of :album_id,:image_url 

end 

ответ

0

Вы можете посмотреть на has_many :through отношения - значит, вы используете одну модель (альбом в вашем случае) в качестве join model, который будет иметь два внешних ключей - photo_id и award_id

Вот что я хотел бы сделать:

#app/models/album.rb 
Class Album < ActiveRecord::Base 
    belongs_to :photo, :class_name => 'Photo' 
    belongs_to :award, :class_name => 'Award' 
    accepts_nested_attributes_for :photo 
end 

#app/models/award.rb 
Class Award < ActiveRecord::Base 
    has_many :albums, :class_name => 'Album' 
    has_many :photos, :class_name => 'Photo', :through => :albums 
    accepts_nested_attributes_for :albums 
end 

#app/models/photo.rb 
Class Photo < ActiveRecord::Base 
    has_many :albums, :class_name => 'Album' 
    has_many :awards, :class_name => 'Award', :through => :albums 
end 

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

чтобы загрузить несколько изображений s к этому, вы сможете использовать accepts_nested_attributes_for так:

#app/controllers/awards_controller.rb 
def new 
    @award = Award.new 
    @award.albums.build.build_photo 
end 

def create 
    @award = Award.new(award_params) 
    @award.save 
end 

private 
def award_params 
    params.require(:award).permit(:award, :variables, albums_attributes: [:extra, :vars, photo_attributes: [:photo]]) 
end 

Вы могли бы добавить к вашей форме загрузки:

<%= form_for @award do |f| %> 
    <%= f.text_field :your_vars %> 
    <%= f.fields_for :albums do |a| %> 
     <%= a.text_field :extra_var %> 
     <%= a.fields_for :photo do |p| %> 
      <%= p.file_field :photo %> 
     <% end %> 
    <% end %> 
<% end %> 
Смежные вопросы