Form_for с :multipart =› true выплевывает

Я пытаюсь добавить поле загрузки аватара на страницу своего профиля, но как только я добавляю к нему :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...
...                               ^

person Martin Lang    schedule 10.05.2012    source источник


Ответы (3)


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

Это либо 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 %>
person Benjamin Udink ten Cate    schedule 10.05.2012

Это должно быть так:

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

Скобка в form_for(@user) на самом деле сообщает интерпретатору Ruby, что функция вызывается только с одним параметром, и вы не можете передать неправильное количество аргументов в метод в Ruby.

person Alston    schedule 02.04.2013

Я предполагаю, что вы либо используете «скрепку», либо «carrierwave» для загрузки изображений. Итак, попробуйте следующее:

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