设计用户更新表单-表单中的第一个参数不能包含nil或为空

时间:2018-07-11 14:24:52

标签: ruby-on-rails

我基本上希望获得用于更新用户个人资料的自定义表单,因为我希望有一个新视图来更新我的用户个人资料。

这是我目前拥有的表格,其中包含错误。

    <%= 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

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

花点时间,阅读您的错误消息,然后思考一下。 form_for助手在抱怨您在需要参数时没​​有传递参数。 form_for助手有什么作用?它为Web表单构建HTML,并将其连接到您指定的某个对象。常识说,它需要一些东西来构建表单,因此,如果您不给它任何东西,它将抛出错误,您会看到错误。

Devise的设计使您可以将其用于任何模型,而不仅限于User。它通过使用名为resource的帮助程序来引用模型,该帮助程序可以从设计控制器和视图(而不是您自己创建的视图)中访问。当您将devise表单复制粘贴到新视图时,您没有在控制器中定义resource,因此form_for助手将其视为nil。

您需要将正在使用的任何用户从控制器传递到视图。您不必将其称为资源。设计表单是针对比您正在使用的更为广泛的案例编写的。像这样:

<%= form_for @user do %>

并在控制器操作中定义@user