html - 未定义 `errors'的方法:NilClass, intermediate html file

标签 html ruby-on-rails ruby error-handling registration

尝试在注册时部分呈现错误时,出现此错误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/

相关文章:

javascript - block 在 Masonry 中与 jQuery 不对齐

javascript - 如何使用 angularjs 设置虚拟属性?

ruby - 使用 SizedQueue 在 ruby​​ 代码中出现死锁

javascript - 如何让我的移动 div 通过按下按钮来移动,而不是通过按下 div 本身来移动?

html - 在 ios 上禁用 html Canvas 绘图的滚动/滑动操作

c# - 如何在 .NET 中正确转义文档名称?

ruby-on-rails - 设计邀请回调 : undefined method `before_invitation_created'

ruby-on-rails - 警告。保存缓存时遇到错误...无法转储匿名类

ruby-on-rails - 使用 Rails 事件记录获取二级模型

Ruby 中的 Java 兼容 REST 客户端