2016-07-26 7 views
0

Wie würde ich nur eine Spalte verwenden, um alle vier Büroklammerattribute darzustellen?So verwenden Sie eine Büroklammer mit einer Spalte

  • _file_name
  • _file_size
  • _content_type
  • _updated_at

Ich teste nur mit dem datei_name Attribut, denn das ist alles, was Büroklammer ist erfordert, und die Speicherung aller meiner Daten in einem Wert Spalte in Feld, die FileField Inherits. Ich dachte, ich könnte nur das Lesen und Schreiben von Dateiname überschreiben, aber das funktioniert nicht.

#model 
class FileField < Field 
    has_attached_file :logo 
    do_not_validate_attachment_file_type :logo 
    def logo_file_name=(file_name) 
    if file_name.present? 
     @value = file_name 
    end 
    end 
    def logo_file_name 
    @value 
    end 


#form 
= f.input :logo, as: :file 

aktualisieren Meine Syntax falsch war, konnte ich es mit dem folgenden

arbeiten erhalten
has_attached_file :attachment 


validates_attachment :attachment, presence: true, 
    content_type: { content_type: ["image/jpeg", "image/png"] }, 
    size: { in: 0..15.kilobytes } 
def attachment_file_name=(file_name) 
    if file_name.present? 
    self.value = "#{file_name},#{attachment_content_type},#{attachment_file_size},#{attachment_updated_at}" 
    end 
end 
def attachment_file_name 
    self.value.to_s.split(",").first 
end 
def attachment_content_type=(content_type) 
    if content_type.present? 
    self.value = "#{attachment_file_name},#{content_type},#{attachment_file_size},#{attachment_updated_at}" 
    end 
end 
def attachment_content_type 
    self.value.to_s.split(",").second 
end 
def attachment_file_size=(file_size) 
    self.value = "#{attachment_file_name},#{attachment_content_type},#{file_size},#{attachment_updated_at}" 
end 
def attachment_file_size 
    self.value.to_s.split(",").third.to_i unless self.value.to_s.split(",").third.blank? 
end 
def attachment_updated_at=(value) 
    self.value = "#{attachment_file_name},#{attachment_content_type},#{attachment_file_size},#{value}" 
end 
def attachment_updated_at 
    self.value.to_s.split(",").fourth 
end 

Antwort

0

ich nicht versucht haben, aber es ist einen Versuch arbeiten:

class FileField < Field 
    attr_accessor :logo_file_size, :logo_content_type, :logo_updated_at 
    has_attached_file :logo 
    ... 
end 

Die Idee ist, Büroklammer zu denken, dass es diese Attribute gibt und sich nicht darum kümmert, welche Werte zurückgegeben werden.

+0

kein solches Glück, obwohl ich nicht sicher bin, wo es falsch läuft. Mit meinem Code oben bekomme ich keine Änderungen, aber wenn ich explizit self.value = @value setze, speichert es Werte des Logos (d. H. Es hat eine URL und andere Büroklammerattribute), aber es kann die Datei nicht finden. Ich bin mir nicht sicher, wie Büroklammer die Dateien speichert und wie man das verwendet – user2034276

+0

Wahrscheinlich ist Ihre beste Wette, nur die zusätzlichen Spalten hinzuzufügen. Ich weiß, dass Sie die Informationen nicht benötigen, aber wird es wirklich ein Problem verursachen? Vielleicht besser, nur in den sauren Apfel zu beißen und die zusätzlichen Spalten hinzuzufügen. –

+0

Das Problem besteht darin, dass die Spalten zu einer Tabelle hinzugefügt werden, die für STI in einem Edelstein verwendet wird, sodass alle Felder, die von ihm im Edelstein geerbt wurden, für alle Büroklammerspalten null aufweisen. Es ist nicht ideal, aber es ist die einzige Lösung, die ich bisher bekommen habe. – user2034276

Verwandte Themen