gpt4 book ai didi

ruby-on-rails - 为 false :FalseClass 更新资源未定义方法 `valid?'

转载 作者:行者123 更新时间:2023-12-04 06:31:55 25 4
gpt4 key购买 nike

我对我的类(class)模型进行了一些验证,并且我能够使用 valid? 方法在创建操作下的 Controller 上突出显示验证问题。但是,如果我以类似的方式尝试 valid?,我会得到 undefined methodvalid?'对于 false:FalseClass` 如何在提交时验证我的编辑表单,以便在验证未通过时再次呈现编辑表单?

类(class)模型:

class Lesson < ActiveRecord::Base
belongs_to :user
has_many :words, dependent: :destroy

validates :title, presence: true, length: { maximum: 55 }
validates :description, presence: true, length: { maximum: 500 }
validates :subject, presence: true, length: { maximum: 55 }
validates :difficulty, presence: true, numericality: { less_than_or_equal_to: 5 }
end

Controller :

class Teacher::LessonsController < ApplicationController
before_action :authenticate_user!
before_action :require_authorized_for_current_lesson, only: [:show, :edit, :update]

def show
@lesson = Lesson.find(params[:id])
end

def new
@lesson = Lesson.new
end

def edit
@lesson = Lesson.find(params[:id])
end

def create
@lesson = current_user.lessons.create(lesson_params)
if @lesson.valid?
redirect_to teacher_lesson_path(@lesson)
else
render :new, status: :unprocessable_entity
end
end

def update
@lesson = current_lesson.update_attributes(lesson_params)
if @lesson.valid?
redirect_to teacher_lesson_path(current_lesson)
else
render :edit, status: :unprocessable_entity
end
end

private
def require_authorized_for_current_lesson
if current_lesson.user != current_user
render text: "Unauthorized", status: :unauthorized
end
end

def current_lesson
@current_lesson ||= Lesson.find(params[:id])
end

def lesson_params
params.require(:lesson).permit(:title, :description, :subject, :difficulty)
end
end

最佳答案

如果您看到类似 undefined method 'valid?' 的错误对于 'false:FalseClass

这意味着无论您在哪里调用方法 :valid?,您调用它的对象都不是您期望的对象,它只是 false

所以您的代码中有两个实例,您正在调用 @lesson.valid?,这意味着 @lesson 的一个或两个赋值有时会返回 false .

docs of create ,它说:无论对象是否成功保存到数据库,都会返回结果对象。

docs of update_attributes ,它表示:如果对象无效,保存将失败并返回 false。

看来您的问题出在 update_attributes 上,如果您的更新不成功,它显然只会返回 false

关于ruby-on-rails - 为 false :FalseClass 更新资源未定义方法 `valid?',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37668457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com