rails关联是否会像SQL create表上的外键那样阻止创建新记录?

rails关联是否会像SQL create表上的外键那样阻止创建新记录?,sql,ruby-on-rails,associations,model-associations,Sql,Ruby On Rails,Associations,Model Associations,我知道这是一个非常简单的问题,但我在任何地方都找不到任何澄清 因此,如果我有: class Task < ActiveRecord::Base belongs_to :group end 类任务

我知道这是一个非常简单的问题,但我在任何地方都找不到任何澄清

因此,如果我有:

class Task < ActiveRecord::Base
    belongs_to :group
end
类任务

类组
如果创建任务时给定的组id在组中不存在,这是否会阻止创建新任务记录


因为我已经试过了,而且它并没有阻止我这样做,不像SQL表上的实际外键属性(rails没有添加到它的表中)

不会-设置
外键和
分配对象之间有区别

在ActiveRecord中,据我所知,您必须向
外键
字段传递一个整数。您可以将整数设置为您想要的任何值,允许您根据需要设置无效的值

如果您传递一个ruby对象(即保存
group:@group
),基本上您必须传递一个有效的对象,Rails才能保存它


据我所知,这是不可能的——它不会在rails中自动执行任何验证,也不会添加任何数据库验证

如果需要,您可以自己验证:

class Task < ActiveRecord::Base
  belongs_to :group
  validate :group_exists?

  def group_exists?
    !!self.group_id && Group.exists?(:id => self.group_id)
  end
end
类任务self.group\u id)
结束
结束
有一些gems可以帮助实现这一点,您也可以使用
验证:group的存在。有关更多讨论,请参见此SO问题:

class Task < ActiveRecord::Base
  belongs_to :group
  validate :group_exists?

  def group_exists?
    !!self.group_id && Group.exists?(:id => self.group_id)
  end
end