繁体   English   中英

Rails关联是否会阻止像SQL创建表上的foreign_key那样创建新记录?

[英]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_keysassigning 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM