Form_for с: multipart => true spits out
Я пытаюсь добавить поле "Загрузка аватара" на мою страницу профиля, но как только я добавлю к нему :html => {:multipart => true}
, он выплевывает синтаксическую ошибку.
<%= 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 %>
Ошибка:
syntax error, unexpected tASSOC, expecting keyword_end
...end= form_for(@user), :html => { :multipart => true } do |f...
... ^
Ответы
Ответ 1
http://guides.rubyonrails.org/form_helpers.html#uploading-files
Он либо a form_tag
помощник с multipart => true
, либо просто form_for
<%= form_tag({:action => :upload}, :multipart => true) do %>
<%= file_field_tag 'picture' %>
<% end %>
<%= form_for @person do |f| %>
<%= f.file_field :picture %>
<% end %>
Ответ 2
Это должно быть так:
form_for @user, :html => { :multipart => true } do |f|
Скобка в form_for(@user)
на самом деле говорит интерпретатору Ruby, что функция вызывается только одним параметром, и вы не можете передать неправильное количество аргументов в методе Ruby.
Ответ 3
Я предполагаю, что вы используете "paperclip" или "carrierwave" для загрузки изображений. Итак, попробуйте следующее:
<%= form_for @user, : url => users_path, :html => {:multipart => true} do |f| %>