gpt4 book ai didi

ruby-on-rails - Rails:验证has_many关联中parent_id的存在

转载 作者:行者123 更新时间:2023-12-03 11:49:51 24 4
gpt4 key购买 nike

我有一个项目资源,其中有很多任务。我想通过将project_id添加到任务模型来确保每个任务都有一个validates_presence_of :project_id

但是,在创建带有任务的新项目时,直到记录保存,project_id才可用,因此我不能使用validates_presence_of :project_id

所以我的问题是,如何验证任务模型中project_id的存在?我想确保每个任务都有 parent 。

...

class Project < ActiveRecord::Base

has_many :tasks, :dependent => :destroy
accepts_nested_attributes_for :tasks, :allow_destroy => true

...
class Task < ActiveRecord::Base

belongs_to :project
validates_presence_of :project_id

最佳答案

您的代码有效:

  • 如果您validates_presence_of:project,则只要该项目存在,它将进行验证。但是,如果您的项目未保存,您仍然可以保存任务。
  • 如果您通过validates_presence_of:project_id,则该整数必须存在,表示已保存的值。

  • 这是rSpec证明了这一点。如果您验证:project_id,则必须保存项目才能保存任务。
    class Task < ActiveRecord::Base
    belongs_to :project
    end

    /specs/model_specs/task_spec.rb
    require File.dirname(__FILE__) + '/../spec_helper'

    describe Task do

    before(:each) do
    @project = Project.new
    end

    it "should require a project_id, not just a project object" do
    task = Task.new
    task.project = @project
    Task.instance_eval("validates_presence_of :project_id")
    task.valid?.should == false
    end

    it "should not be valid without a project" do
    task = Task.new
    task.project = @project
    Task.instance_eval("validates_presence_of :project")
    task.valid?.should == false
    task.save.should == false
    end

    end

    关于ruby-on-rails - Rails:验证has_many关联中parent_id的存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859384/

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