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