nil:NilClass、中间 html 文件的未定义方法“错误”

undefined method `errors' for nil:NilClass, intermediate html file

我在尝试在注册时呈现部分错误时收到此错误 undefined method `errors' for nil:NilClass NoMethodError 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>

以及控制器的创建方法

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

根据您的错误消息,我们可以得出结论,您的 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? %>
<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") %> # THIS IS NOT A PARTIAL

  </div>
  <div id="vendor_register">
  <%= render("vendors/new") %>   # THIS IS NOT A PARTIAL
  </div>
</div>

如果是局部的,你需要做这样的事情。

<%= render "customers/new", customer: @customer %>

然后,在您的 customer/new.html.erb 中,您将所有内容都称为 customer,因为该变量现在存在。很可能是因为您没有将模型传递到嵌套模板部分,所以您会得到 nil:NilClass`

undefined methoderrors'