2011-01-09 3 views
1

Ich habe ein Content-Modell, das eine oder mehrere Audio-Dateien hat, die durch das neue/edit-Formular hinzugefügt werden müssen. Was ich habe, um die Modelle mit dieser Beziehung erstellt:Rails 3 fields_für anderes Layout für bestehende Datensätze/neue Datensätze, Datei-Uploads

class Audio < ActiveRecord::Base 
    belongs_to :content 
    has_attached_file :audiofile, 
end 

class Content < ActiveRecord::Base 
    ... 
    has_many :audios 
    accepts_nested_attributes_for :audios, :allow_destroy => true 
end 

Jetzt in meiner neuen Inhalt Form habe ich folgende:

<% f.fields_for :audios do |audiof| -%> 

    <%= f.label :audiofile, 'Audio file:' %>&nbsp; 
    <%= audiof.file_field :audiofile %> 

<% end -%> 

Was ich brauche es ist mir die file_field nur zu tun, zeigen Für eine neue Audiodatei und für die vorhandenen Audiodateien drucke einfach eine Dateigröße, einen Namen und wahrscheinlich eine Löschtaste.

Ich habe auch eine neue Datensatz in der Steuerung mit:

@content.audios.build 

Ich bin mit Rails 3.0.3 mit Paperclip-Plugin für den Upload. Entschuldigung, wenn die Frage zu nooby ist.

Danke.

Antwort

0

Aus meinem Speicher können Sie auf die Instanz des Objekts innerhalb der fields_for-Anweisung zugreifen.

Probieren Sie etwas wie folgt aus:

<% f.fields_for :audios do |audiof| -%> 
    <% if audiof.object.new_record? %> 
    <%= f.label :audiofile, 'Audio file:' %>&nbsp; 
    <%= audiof.file_field :audiofile %> 
    <% else %> 
    <%= "Filename = #{audiof.object.audiofile.filename}" %> 
    <%= "url = #{audiof.object.audiofile.url}" %> 
    <% end %> 
<% end -%> 

Wenn audiof.object kehrt nil (In diesem Fall ist es nicht der gute Name ist), überprüfen, indem alle öffentlichen Methoden Anzeigen <% = raise audiof.public_methods.inspect %>

Die Objektmethode sollte eine Instanz einer Audio-Klasse zurückgeben.

+0

Danke das war, was ich suchte, aber nicht wusste, wie man auf den new_record zugreift? Methode. – laleshii