wake-up-neo.com

Form_for mit: multipart => true spuckt aus

Ich versuche, ein Avatar-Upload-Feld zu meiner Profilseite hinzuzufügen, aber sobald ich den :html => {:multipart => true} hinzugefügt habe, wird ein Syntaxfehler ausgegeben.

<%= form_for(@user), :html => { :multipart => true } do |f| %>
<%= render 'shared/error_messages', object: f.object %>

<%= f.label :name %>
<%= f.text_field :name %>

<%= f.label :email %>
<%= f.email_field :email %>

<%= f.label :password %>
<%= f.password_field :password %>

<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>


<%= f.label :avatar %>
    <%= f.file_field :avatar %>

    <%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>

Der Fehler ist:

syntax error, unexpected tASSOC, expecting keyword_end
...end=  form_for(@user), :html => { :multipart => true } do |f...
...                               ^
15
Martin Lang

http://guides.rubyonrails.org/form_helpers.html#uploading-files

Es ist entweder ein form_tag Helfer mit multipart => true oder nur form_for

<%= form_tag({:action => :upload}, :multipart => true) do %>
  <%= file_field_tag 'picture' %>
<% end %>

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

Es sollte so sein:

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

Die Klammer in form_for(@user) teilt Ruby-Interpreter mit, dass die Funktion mit nur einem Parameter aufgerufen wird, und Sie können in Ruby keine falsche Anzahl von Argumenten in einer Methode übergeben.

35
Alston

Ich gehe davon aus, dass Sie entweder 'Paperclip' oder '' carrierwave 'verwenden, um Bilder hochzuladen. Also probieren Sie das aus:

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