Rails:验证 has_many 关联中 parent_id 的存在 [英] Rails: validate presence of parent_id in has_many association

查看:16
本文介绍了Rails:验证 has_many 关联中 parent_id 的存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个包含许多任务的项目资源.我想通过将 validates_presence_of :project_id 添加到任务模型来确保每个任务都有一个 project_id.

I have a projects resource that has many tasks. I want to ensure that every task has a project_id by adding validates_presence_of :project_id to the tasks model.

但是,在创建带有任务的新项目时,project_id 在记录保存之前将不可用,因此我无法使用 validates_presence_of :project_id.

However, when creating a new project with tasks, the project_id won't be available until the record saves, therefore I can't use validates_presence_of :project_id.

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

So my question is, how do I validate presence of project_id in the task model? I want to ensure every task has a 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

推荐答案

您的代码有效:

  • 如果你validation_presence_of :project,那么只要项目在那里,它就会验证.但如果您的项目未保存,您仍然可以保存任务.
  • 如果您validates_presence_of :project_id,则整数必须存在,表示已保存的值.

这里的 rSpec 证明了这一点.如果您验证 :project_id,则无法在不保存项目的情况下保存任务.

Here's rSpec that proves the point. If you validate :project_id, you can't save a task without saving the Project.

class Task < ActiveRecord::Base
  belongs_to :project
end

/specs/model_specs/task_spec.rb

/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

这篇关于Rails:验证 has_many 关联中 parent_id 的存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆