Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails-外键(外键)_Ruby On Rails_Foreign Keys_Constraints_Foreigner - Fatal编程技术网

Ruby on rails Ruby on Rails-外键(外键)

Ruby on rails Ruby on Rails-外键(外键),ruby-on-rails,foreign-keys,constraints,foreigner,Ruby On Rails,Foreign Keys,Constraints,Foreigner,我是RoR的新手,所以不要对我可能说的傻话感到惊讶。。。提前道歉 我试图在两个模型“附录”和“合同”之间创建外键约束 ActiveRecord现在是这样的 class Addendum < ActiveRecord::Base belongs_to :contract end class Contract < ActiveRecord::Base has_many :addendums end 类附录

我是RoR的新手,所以不要对我可能说的傻话感到惊讶。。。提前道歉

我试图在两个模型“附录”和“合同”之间创建外键约束

ActiveRecord现在是这样的

class Addendum < ActiveRecord::Base
    belongs_to :contract  
end


class Contract < ActiveRecord::Base
    has_many :addendums
end
类附录
因此,我需要的是,该计划只允许创建一个新的附录,如果它将与现有的合同。我已安装gem并创建了此迁移:

class AddingForeignKeys < ActiveRecord::Migration
  def change
    add_foreign_key(:contracts, :addendums)
  end
end
class AddingForeignKeys
运行rakedb:migrate

并希望看到ActiveRecord::Base上的更改(指示外键约束),但不会发生任何更改


我做错了什么?

在附录表中有一个合同id列,创建关联(在您的情况下有多个且属于)并在附录模型中加入验证约束就足够了:

validates :contract, presence: true
希望有帮助


Federico

那么,validates和外键之间有什么区别?很抱歉,必须更正我的帖子。实际上,你应该验证的不是字段而是名称,我更新了我以前的帖子:validates:contract,presence:true。这不仅会检查字段的存在,还会检查db上是否存在实际的合同(这就是你想要的)谢谢,我想这会有用的…既然你在那里,那么一个关联have_和uu属于多个呢?我如何验证?例如,我有
address.rb:have_和uu属于多个:害虫
Pest.rb:have_和uu属于多个:addendums
我应该有
验证:害虫,存在:true
验证:addendu>吗m、 presence:true
?我认为如果您想要验证,最好使用has\u many:through模型。请查看本指南: