我很难使用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才能传回文件。
答案 0 :(得分:1)
更新用户的路径不是update_users_path
,user_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| %>