2016-11-17 2 views
1

Ich habe ein Profile Modell, das: siehtWie ändere ich den Namen des Dateifeldes in simple_form, wenn eine Datei existiert?

 <%= f.simple_fields_for :transcripts do |transcript| %> 
     <%= render 'transcript_fields', f: transcript %> 
     <% end %> 

Und die app/views/profiles/_transcript_fields.html.erb wie folgt aus::

has_many :transcripts, dependent: :destroy 
    accepts_nested_attributes_for :transcripts, allow_destroy: true 

Also auf meinem app/views/profiles/_form.html.erb, ich habe folgendes

<%= f.file_field :attachment, class: 'col-lg-4 form-control' %> 

Also, was ich Wollen Sie tun, ist auf der _transcript_fields teilweise, wenn die profilehat, ich möchte, dass es ein Dateifeld anzeigt, das den Namen der angehängten Datei hat - auf diese Weise können sie, wenn sie die angefügte Datei ändern wollen, auf denselben file_field klicken und den Transcript-Datensatz aktualisieren.

ich die eigentliche Update-Vorgang arbeitet jetzt haben, aber was passiert ist, es zeigt nur die Felder wie folgt aus:

enter image description here

Wo die oben file_field die vorhandene Datei ist, und der untere reflektiert ein neues Feld, das hinzugefügt werden kann.

+0

Wie eine der Antworten gesagt, ist es nicht möglich. Es ist ein Sicherheitsproblem. Sie müssen einen anderen Weg finden, Ihre Anforderung zu erfüllen. – DickieBoy

+0

Wenn Sie so etwas wie carrierwave verwenden, um mit den Uploads fertig zu werden, können Sie etwas davon tun, da es den Dateinamen usw. beibehalten kann. Leider haben Sie festgestellt, dass Ihr Browser nicht in der Lage sein soll, Dateien im Dateisystem über einen bestimmten Punkt hinaus zu mutieren. Dies ist ein Sicherheitsproblem, mit dem Sie konfrontiert werden.Nachdem Sie das gesagt haben, sobald Sie die hochgeladene Datei Binärdaten in der Controller-Methode haben. Du könntest es an dieser Stelle nennen, was immer du willst, bevor du es beharrst. So können Sie die Manipulation auf der Seite der Rails tun, sobald die Daten persistent sind. – engineerDave

Antwort

1

Im _transcript_fields Teil können Sie überprüfen, ob das aktuelle Objekt transcript bereits persistent ist oder nicht. Auf dieser Grundlage ist es möglich, etwas anderes zu rendern.

Etwas wie:

# app/views/profiles/_transcript_fields.html.erb 
<% if f.object.persisted? %> 
    <%= f.object.name %> 
<% else %> 
    <%= f.file_field :attachment, class: 'col-lg-4 form-control' %> 
<% end %> 
+0

Also das bringt mich teilweise dahin. Ich denke, die wirkliche Frage ist, wie fülle ich den Namen des 'file_field' mit dem Namen der Datei, wenn' f.object.persisted? ' – marcamillion

+1

Ich glaube nicht, dass Sie ein' file_field' für verwenden möchten eine Datei, die bereits hochgeladen wurde. Es genügt, nur den Dateinamen in einem Span/Div anzugeben. – zwippie

5

Sie können nicht.

Die einzige Möglichkeit, den Wert einer Dateieingabe festzulegen, ist, wenn der Benutzer eine Datei aus seinem System auswählt. Wenn Sie es mit Nachdruck tun, wird es in HTML so aussehen.

<form name="foo" method="post" enctype="multipart/form-data"> 
    <input type="file" value="c:/rails.png"> 
</form> 

Dies erfolgt aus Sicherheitsgründen. Sonst würden Sie in der Lage sein, ein Javascript zu erstellen, die automatisch eine bestimmte Datei aus dem Kunden-Computer hochgeladen, aber wenn Sie etwas bearbeiten Funktionalität einer hochgeladenen Datei Feld haben wollen, was wollen Sie wahrscheinlich zu tun ist:

  1. anzeigen Der aktuelle Wert dieses Felds wird einfach durch Drucken des Dateinamens oder der URL, eines klickbaren Links zum Herunterladen oder eines Bildes angezeigt. Zeigen Sie es einfach an, möglicherweise als Miniaturansicht.
  2. Das file_field zum Hochladen einer neuen Datei.
  3. Ein Kontrollkästchen, das bei der Überprüfung die aktuell hochgeladene Datei löscht. Beachten Sie, dass es keine Möglichkeit gibt, eine "leere" Datei hochzuladen. Sie brauchen also etwas, um den Wert des Feldes zu löschen.

Ich hoffe, ich habe Ihre Frage beantwortet.

+0

Kinda .... das Problem ist, dass ich Dateifelder gesehen habe, die den Namen der angehängten Datei haben ... also frage ich mich, wie sie es getan haben. – marcamillion

Verwandte Themen