我基本上希望获得用于更新用户个人资料的自定义表单,因为我希望有一个新视图来更新我的用户个人资料。
这是我目前拥有的表格,其中包含错误。
<%= form_for resource, as: resource_name, url: user_registration_path(resource_name),
html: {method: :put, multipart: true} do |f| %>
<label>Name</label>
<%= f.label :name, value: 'ben'%>
<%= f.text_field :name, autofocus: false, class: 'form-control', placeholder: "Stephen" %>
<input type="text" class="form-control" placeholder="Enter email" value="<%= @user.name %>">
<%= f.submit "Update", class: 'btn btn-success ml-auto' %>
<% end %>
在我的路线中,我得到了'/ user /:id',:to =>'user#profile',:as =>:user
有人可以帮助我吗?
答案 0 :(得分:0)
花点时间,阅读您的错误消息,然后思考一下。 form_for
助手在抱怨您在需要参数时没有传递参数。 form_for助手有什么作用?它为Web表单构建HTML,并将其连接到您指定的某个对象。常识说,它需要一些东西来构建表单,因此,如果您不给它任何东西,它将抛出错误,您会看到错误。
Devise的设计使您可以将其用于任何模型,而不仅限于User
。它通过使用名为resource
的帮助程序来引用模型,该帮助程序可以从设计控制器和视图(而不是您自己创建的视图)中访问。当您将devise表单复制粘贴到新视图时,您没有在控制器中定义resource
,因此form_for助手将其视为nil。
您需要将正在使用的任何用户从控制器传递到视图。您不必将其称为资源。设计表单是针对比您正在使用的更为广泛的案例编写的。像这样:
<%= form_for @user do %>
并在控制器操作中定义@user
。