简单的表格行动路线不适用于红宝石

时间:2015-10-29 04:05:14

标签: ruby-on-rails ruby paperclip simple-form

我很难使用Paperclip宝石。我试图将图片上传为我的用户的头像。每次上传时,它都会获取文件并将其存储在用户数据库表中。我试图让我的简单表单通过action='/users/<%=session[:user_id]%>',然后通过user#update(然后会更新我的用户图片),但它只是给了我一个错误:

`undefined local variable or method `update_users_path' for '
form_for @user, :url => update_users_path, :method => patch, :html => {:multipart => true} do |f| %>
    <%= f.label :avatar %>
    <%= f.file_field :avatar %>
    <div class="form-action">
        <%= f.submit :submit %>
    </div>
<% end %>

我尝试在没有Simple Form的情况下执行此操作,但我需要将multipart设置为true才能传回文件。

2 个答案:

答案 0 :(得分:1)

更新用户的路径不是update_users_pathuser_path(@user):method =>:patch:method => :put。 RESTful路由将PUT /users/:id#update操作相关联。有关详细信息,请查看Rails Routing guide

您应该能够正确构建表单:

form_for @user, :method => :patch, :html => {:multipart => true}

网址将从method@user推断,或者如果您想要包含该网址,请使用:url => user_path(@user)。事实上,因为@user已经存在,Rails也会为你推断:method

由于您使用的是form_for(可能是最新版本的Rails),因此您也不需要明确添加multipart。正如Form Helpers guide所示,Rails会从f.file_field的存在中找出它并将其包含在内。

答案 1 :(得分:0)

错误是update_users_path不是有效路线。

-

路线为user_path(@user) method: :patch(如果您在路线中使用resources :users

如果您已正确填充@user,则只需将其直接传递到form_for,就不会出现问题,如下所示:

#app/views/users/edit.html.erb
<%= form_for @user, multipart: true do |f| %>