[英]Does rails association prevents a new record to be created like a foreign_key on a SQL create table would?
我知道这是一个非常简单的问题,但是我看不到任何澄清的地方。
所以,如果我有:
class Task < ActiveRecord::Base
belongs_to :group
end
和
class Group < ActiveRecord::Base
has_many :tasks
end
如果创建任务时给出的group_id在组中不存在,这是否会阻止创建新任务记录?
因为我已经尝试过了,但这并不能阻止我这样做,这与SQL表上的实际foreign_key属性不同(rails不会添加到其表中)
不,不会-设置foreign_keys
和assigning objects
之间有区别
据我所知,在ActiveRecord中,您必须将一个整数传递给foreign_key
字段。 您可以将整数设置为所需的任何值,如果需要,可以设置无效的整数
如果您传递一个ruby对象(即IE保存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
有一些宝石可以帮助解决这个问题,您也可以使用validates_presence_of :group
。 请参阅此SO问题以获取更多讨论: 正确的方法使用validates_presence_of与belongs_to关联
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.