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