【发布时间】:2016-08-31 14:03:31
【问题描述】:
我在注册时尝试呈现部分错误时收到此错误undefined method `errors' for nil:NilClassNoMethodError in Pages#registration。我将实际的注册表单制作为部分表单,然后将其呈现为不同页面的选项卡内容,所以现在当我尝试呈现错误消息时,它首先通过导致错误的中间页面,无论如何解决这个问题,或者是否有必要将注册表单作为实际视图而不是局部视图。我从新的操作部分渲染了错误部分。
这是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>
以及控制器的create方法
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 %>
页面控制器:
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
【问题讨论】:
-
试试
<%= render("customers/new", obj: @customer) %> -
等待在主视图页面中呈现部分错误的位置?
-
我应该在哪里包含这行代码?
-
您说的代码属于错误部分。它的文件名是什么以及你实际渲染它的位置?
-
我在新的partial中渲染了它,但是我只是更改了代码,现在在注册文件中渲染了error partial
标签: html ruby-on-rails ruby error-handling registration