尝试在注册时部分呈现错误时,出现此错误undefined method `errors' for nil:NilClass
NoMethodError in Pages#registration
。我将实际的注册表单作为部分表单,然后将其呈现为其他页面的选项卡的内容,所以现在当我尝试呈现错误消息时,它首先通过导致错误的中间页面,无论如何解决此问题,还是有必要使注册表单成为实际 View 而不是局部 View 。我从新 Action 中部分地渲染了错误。
这是registration.html文件
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery UI Tabs - Default functionality</title>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/dark-hive/jquery-ui.css">
</head>
<body>
<div id="tabs">
<ul>
<li><a href="#customer_register">Customer</a></li>
<li><a href="#vendor_register">Vendor</a></li>
</ul>
<div id="customer_register">
<%= render "customers/new", customer: @customer %>
</div>
<div id="vendor_register">
<%= render "customers/new", vendor: @vendor %>
</div>
</div>
</body>
</html>
和 Controller 的创建方法
def create
@customer = Customer.new(customer_params)
if @customer.save
flash[:success] = "Welcome to Discount Now #{customer.first_name} #{customer.last_name}"
redirect_to dashboard_path
else
render 'pages/registration'
end
end
注册文件将新操作呈现为选项卡的内容。
错误消息部分:
<% if obj.errors.any? %>
<div class="row">
<div class="col-xs-8 col-xs-offset-2">
<div class="panel panel-danger">
<div class="panel-body">
<ul>
<% obj.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
</div>
</div>
</div>
</div>
<% end %>
新的部分代码:
<%= render 'shared/errors', obj: customer %>
<%= form_for customer do |f| %>
<div class= "form-group">
<div class= "row reg_row">
<%= f.text_field :first_name, class: "col-sm-6 form-control", placeholder: "first name", required: true, autofocus: true %>
<%= f.text_field :last_name, class: "col-sm-6 form-control", placeholder: "first name", required: true, autofocus: true %>
</div>
<div class= "row reg_row">
<%= f.email_field :email, class: "col-sm-6 form-control", placeholder: "email", required: true, autofocus: true %>
<%= f.password_field :password, class: "col-sm-6 form-control", placeholder: "password", required: true, autofocus: true %>
</div>
<div class= "row button-margin">
<%= f.submit "Sign up", class: "btn btn-primary" %>
</div>
</div>
<% end %>
页面 Controller :
class PagesController < ApplicationController
def index
end
def about
end
def faq
end
def contact
end
def registration
end
def login
end
end
如果我在执行新操作时将新初始化的客户对象添加到注册文件中,此代码是否有效?
因此,我将代码传递给注册文件呈现新部分时创建的客户变量,从而编辑代码以从新部分中呈现错误部分,因此现在该错误成为pages#registration中的名称错误,错误消息已读取
undefined local variable or method `customer' for #<#<Class:0x007fa6497deb40>:0x007fa648e32268>
Did you mean? customer_url
最佳答案
根据您的错误消息,我们可以得出结论,您的obj
设置为nil
。否则,您将得到NameError: undefined local variable or method
错误。
确保已正确设置了obj
局部变量。如果可以是nil
,则添加if
检查或使用try()
方法。
<% if obj && obj.errors.any? %>
# OR
<% if obj.try(:errors).try(:any?) %>
# OR, if you are using Ruby 2.3 or later
<% if obj&.errors&.any? %>
关于html - 未定义 `errors'的方法:NilClass, intermediate html file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37056432/