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 错误。
我是 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 错误。