我知道这是一个非常简单的问题,但我无法在任何地方找到任何澄清。
所以,如果我有:
class Task < ActiveRecord::Base
belongs_to :group
end
和
class Group < ActiveRecord::Base
has_many :tasks
end
如果创建任务时给出的group_id在组中不存在,这是否会阻止创建新任务记录?
因为我已经尝试了这个并且它不会阻止我这样做,这与SQL表上的实际foreign_key属性不同(rails不会添加到其表中)
答案 0 :(得分:0)
不,不会 - 设置foreign_keys
和assigning objects
在ActiveRecord中,据我所知,你必须将一个整数传递给foreign_key
字段。您可以将整数设置为您想要的任何值,如果您愿意,可以设置无效的
如果你传递一个ruby对象(I.E save group: @group
),你基本上必须为Rails传递一个有效的对象来保存它
这就像我所知道的那样
答案 1 :(得分:0)
不 - 它不会自动在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 with belongs_to associations, the right way