6

Chcę, aby polimorficzne skojarzenia z spinacza i pozwalają użytkownikowi na moje mają jedną postać i wiele obrazów.szyn 3 polimorficzny skojarzenia z spinacza i wielu modeli

Załącznik model:

class Attachment < ActiveRecord::Base 
belongs_to :attachable, :polymorphic => true 
end 

class Avatar < Attachment 
has_attached_file :image, :styles => { :thumb => "150x150>", :view => "260x180>" }, 
end 

class Image < Attachment 
has_attached_file :image, :styles => { :thumb => "150x150>", :view => "260x180>" }, 
end 

modelu użytkownika:

has_one :avatar, :as => :attachable, :class_name => 'Attachment', :conditions => {:type => 'avatar'} 
accepts_nested_attributes_for :avatar 

Controller User:

def edit 
    @user.build_avatar 
end 

User View forma:

<%= form_for @user, :html => { :multipart => true } do |f| %> 

    <%= f.fields_for :avatar do |asset| %> 
     <% if asset.object.new_record? %> 
      <%= asset.file_field :image %> 
     <% end %> 
    <% end %> 

przy próbie zapisania zmian pojawia się błąd => nieznany atrybut: Avatar

jeśli usunąć: class_name => „załącznik” w związku has_one pojawia się błąd => niezainicjowanej stałą Użytkownika :: Avatar

muszę również dołączyć awatary na blogu posty, więc muszę skojarzenie być polimorficzny (lub przynajmniej tak myślę)

Jestem zakłopotany i każda pomoc będzie mile widziana.

Odpowiedz

6

mam projekt w pracach, które są z powodzeniem przy użyciu spinacza i polimorficzne skojarzenia. Pokażę ci, co mam, a może można zastosować go do projektu:

class Song < ActiveRecord::Base 
    ... 
    has_one :artwork, :as => :artable, :dependent => :destroy 
    accepts_nested_attributes_for :artwork 
    ... 
end 

class Album < ActiveRecord::Base 
    ... 
    has_one :artwork, :as => :artable, :dependent => :destroy 
    accepts_nested_attributes_for :artwork 
    ... 
end 

class Artwork < ActiveRecord::Base 
    belongs_to :artable, :polymorphic => true 
    attr_accessible :artwork_content_type, :artwork_file_name, :artwork_file_size, :artwork 

    # Paperclip 
    has_attached_file :artwork, 
    :styles => { 
     :small => "100", 
     :full => "400" 
    } 

    validates_attachment_content_type :artwork, :content_type => 'image/jpeg' 
end 

forma utwory i albumy tworzą zawierać to jako częściowy:

<div class="field"> 
<%= f.fields_for :artwork do |artwork_fields| %> 
    <%= artwork_fields.label :artwork %><br /> 
    <%= artwork_fields.file_field :artwork %> 
<% end %> 

don „zapomnieć obejmuje: HTML => {: wieloczęściowy => true} o postaci

artworks_controller.rb

class ArtworksController < ApplicationController 
    def create 
    @artwork = Artwork.new(params[:artwork]) 

    if @artwork.save 
     redirect_to @artwork.artable, notice: 'Artwork was successfully created.' 
    else 
     redirect_to @artwork.artable, notice: 'An error ocurred.' 
    end 
    end 
end 

i wreszcie fragment songs_controller.RB:

def new 
    @song = Song.new 
    @song.build_artwork 
end 
+0

ahh właśnie to, czego potrzebowałem, dzięki Brett! – kaigth

+0

@kaigth, przepraszam, podarowałem ci taką możliwość. Powinienem był zacząć od tego. Wszystkiego najlepszego. – Brett

+0

czy style załączników w modelu Grafiki mogą być inne dla albumu i utworu na podstawie zależności polimorficznej? – ramkumar

0

Nie jestem pewien, czy naprawdę potrzebujesz polimorfizmu. Co powiesz na to podejście, które używa has_many: through? W prostym języku angielskim, użytkownik ma jeden awatar, który ma wiele obrazów, a poprzez to powiązanie można wywoływać User.images, aby uzyskać kolekcję obrazów powiązanych z awatarem.

http://guides.rubyonrails.org/association_basics.html

class User < ActiveRecord::Base 
    has_one :avatar 
    has_many :images, :through => :avatar 
end 

class Avatar < ActiveRecord::Base 
    belongs_to :user 
    has_many :images 
end 

class Image < ActiveRecord::Base 
    belongs_to :avatar 
    has_attached_file :image, :styles => { :thumb => "150x150>", :view => "260x180>" }, 
end 

Powiedziawszy to wszystko, ja zostaję się zastanawiać, dlaczego trzeba przejść przez to wszystko i tak. Dlaczego nie po prostu zrobić po prostu tyle zdjęć (awatarów), ile chcesz.

+0

ów niesamowite, ale również chcesz dołączyć do bloga posty awatary, więc nadal trzeba używać polimorficzne skojarzenia Post :: Avatar – kaigth

+0

@kaigth byś nie chcą dołączyć użytkownikom na blogu posty i następnie złap ich związanego awatara? – Brett

+0

@ Brett Chcę, aby ludzie mogli przypisywać oddzielne awatary do postów na blogu, więc ich posty mogą być unikatowe zamiast awatara dla użytkowników. – kaigth

Powiązane problemy