ruby-on-rails 表单中的第一个参数不能包含nil或为空- Rails

dfty9e19  于 2022-11-19  发布在  Ruby
关注(0)|答案(1)|浏览(158)

我在Rails中的用户注册表单中遇到以下错误:

ActionView::Template::Error (First argument in form cannot contain nil or be empty)

检视:

<%= form_for User.new, url: create_user_path, method: :post do |f|  %>
          <div class="form-group">
            <%= f.label :name, t("settings.account.fullname"), class: "form-label" %>
            <%= f.text_field :name, class: "form-control #{form_is_invalid?(User.new, :name)}", placeholder: t("settings.account.fullname"), autofocus: "", required: "" %>
            <div class="invalid-feedback d-block"><%=User.new.errors.full_messages_for(:name).first %></div>
          </div>

控制器:

def create
    @user = User.new(user_params)
    @user.provider = @user_domain
  end
    and so on..

我是新来的,谁能帮我一下吗?

huus2vyu

huus2vyu1#

除了奇怪的错误消息,这不是Rails中的表单。
由于您将User.new传递给表单,因此它将始终绑定到User的新示例。这意味着用户在表单中输入的任何内容都将在无效表单提交时被清空。User.new.errors.full_messages_for(:name).first将给予nil错误,因为未验证的记录上没有验证消息。
你实际上想要的是这样的东西:
第一个
如果您只遵循Rails约定,则无需指定URL或从记录派生的方法。这使您可以重用同一表单来更新现有记录,而无需更改代码中的任何内容。
create_user_path本身非常不符合规范,因为Rails没有单独的路径来创建记录。通过向集合路径(/users)发送POST请求来创建记录。

相关问题