簡體   English   中英

nil:NilClass的未定義方法“錯誤”-Ruby on Rails

[英]undefined method `errors' for nil:NilClass - Ruby on Rails

我對Ruby on Rails完全陌生。 我試圖在注冊時顯示一條消息。 請檢查我的控制器並查看代碼-

users_controller.rb

class UsersController < ApplicationController
  #before_action :set_user, only: [:show, :edit, :update, :destroy, :success]

  def login
    render layout: false
  end
  def register
    render layout: false
    @user = User.new
  end

  def create_register
    @user = User.new(create_user_params)
    #raise @user.inspect
    respond_to do |format|
      if @user.save
        format.html { redirect_to @users, notice: 'Registration was successfully created.' }
        format.json { render :success, status: :created, location: @users }
      else
        format.html { render :register }
        format.json { render json: @ruby_win_source.errors, status: :unprocessable_entity }
      end
    end
  end

  def success
    raise @user.inspect
  end


  private
  # Use callbacks to share common setup or constraints between actions.
  def set_user
    @user = User.find(params[:id])
  end

  # Never trust parameters from the scary internet, only allow the white list through.
  def user_params
    params.require(:user).permit(:name, :username, :email, :password, :image, :dob, :photo, :address)
  end
end

register.html.erb

<%= form_tag(@user) do |f| %>
         <% if @user.errors.any? %>
          <div id="error_explanation">
            <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
            <ul>
              <% @user.errors.full_messages.each do |message| %>
                <li><%= message %></li>
              <% end %>
            </ul>
          </div>
<% end %>

的routes.rb

get    'register'   => 'users#register'
post   'register'   => 'users#create_register'

網址-http:// localhost:3000 / register

當我加載此頁面時,我收到此錯誤消息-

在此處輸入圖片說明

我在谷歌搜索,並得到一些相同的問題鏈接。 遵循步驟,但是我的問題仍然沒有解決。 請幫我 :(

在create_register方法中,創建一個新的用戶調用

@user = User.new(create_user_params)

但是您的強params方法名為user_params。 嘗試將以上行更改為

@user = User.new(user_params)

您的register方法中的2行是相反的。 嘗試這個:

def register
  @user = User.new
  render layout: false
end

您試圖在nil類上運行方法errors 做Rails時很常見的問題。 這條線

<%= form_tag(@user) do |f| %> <% if @user.errors.any? %>

正在尋找一個@user對象。 您確實嘗試在此處聲明一個:

def register render layout: false @user = User.new end

但是基於錯誤,我假設它失敗了。 沒有看到用戶表的遷移,我猜您沒有創建一個? 要為活動記錄類創建新的User對象,您需要針對數據庫運行遷移,以便可以使用表。

http://guides.rubyonrails.org/active_record_migrations.html

我在這里也沒有看到模型。 要使用User.new ,還需要一個模型。

http://guides.rubyonrails.org/active_record_basics.html

現在,還有另一種工具可以使您在Rails中工作變得更加輕松。

http://pryrepl.org/

有史以來最酷的工具。 只需安裝pry gem,需要pry並在新行中添加binding.pry在需要入代碼的任何位置進行操作,並且可以直接使用代碼。 對於這種情況,我會這樣做。

def register render layout: false require `pry`; binding.pry; @user = User.new end

然后轉到正在運行服務器的終端,並且您位於代碼內。 然后嘗試代碼的失敗部分。 @user = User.new它會給你更多啟發性的錯誤信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM