RAILS:nil:NilClass 的未定义方法“预算”

RAILS: undefined method `budget' for nil:NilClass

我是 rails 的新手,这里的问题是我正在尝试使用特定用户 ID 创建预算,但是当我尝试使用邮递员创建预算时:

{
    "name": "Segundo", "description": "segundo"
}

它向我发送错误消息:

nil:NilClass 的未定义方法“预算” 提取的源代码(大约第 14 行):

def create
    @budget = current_user.budget.build(budget_params)
    @budget.save 
end  

我的控制器:

class BudgetsController < ApplicationController
before_action :find_id, only: [:show, :edit, :update, :destroy]

def budget_params
    params.require(:budget).permit(:name, :description)
end

def new
    @budget = current_user.budgets.build
    render layout: false
end

def create
    @budget = current_user.budgets.build(budget_params)
    @budget.save 
end

def show
    render json: @budget
end

def edit
    render layout: false
end

def update
    @budget.update(budget_params) 
end

def destroy
    @budget.destroy
end

def find_id
    @budget = Budget.find(params[:id])
end
end

我的路线:

Rails.application.routes.draw do
  resources :sessions, only: [:create]
  resources :registrations, only: [:create]
  delete :logout, to: "sessions#logout"
  get :logged_in, to: "sessions#logged_in"
  root to: "static#home"
#budgets
resources :budgets

#expenses
resources :expenses, only: [:create, :show, :edit, :update, :destroy]

#incomes
resources :incomes, only: [:create, :show, :edit, :update, :destroy]

#investments

resources :investments, only: [:create, :show, :edit, :update, :destroy]

结束 谁能帮我解决这个问题?

您没有在任何地方定义 current_user。您可能应该在保存当前用户的地方设置一个 before_action,或者您的预算控制器可以继承的基本控制器(如果您打算拥有更多使用 current_user 的控制器)。

如果您使用邮递员并希望在数据库中保存在正常流程中只有注册用户才能保存的内容,您需要在请求中发送用户会话 cookie 值。 https://learning.postman.com/docs/sending-requests/cookies/。 如果您不随请求发送会话 cookie,则表示该请求是由访客而非登录用户发送的。 current_user 为零,因此您会得到 undefined method `budget' for nil:NilClass 错误。