Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.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 Rails 6.0关联查询_Ruby On Rails_Ruby_Associations - Fatal编程技术网

Ruby on rails Rails 6.0关联查询

Ruby on rails Rails 6.0关联查询,ruby-on-rails,ruby,associations,Ruby On Rails,Ruby,Associations,我正在使用RubyonRails6.0。 我有两个实体,一个事件表和一个gem模块,例如用于人(person)。事件表中的一个字段是contact_person,它应该指向gem模块people(person)。当我尝试用种子数据填充表时,我得到: ActiveRecord::RecordInvalid:验证失败:联系人必须存在 您可以在下面找到db定义。我是新来的,有没有暗示我做错了什么? 谢谢你的帮助 问候,, 丹尼 迁移事件表的文件: class CreateApplicationEven

我正在使用RubyonRails6.0。 我有两个实体,一个事件表和一个gem模块,例如用于人(person)。事件表中的一个字段是contact_person,它应该指向gem模块people(person)。当我尝试用种子数据填充表时,我得到: ActiveRecord::RecordInvalid:验证失败:联系人必须存在

您可以在下面找到db定义。我是新来的,有没有暗示我做错了什么? 谢谢你的帮助

问候,, 丹尼

迁移事件表的文件:

class CreateApplicationEvents < ActiveRecord::Migration[6.0]
  def change
        create_table :events
                t.references :contact_person, null: true, foreign_key: { 
                    to_table: :core_people_and_companies_people }
                t.timestamps
        end
  end
end

我通过在事件的modles文件中添加“可选:true”来解决此问题:

“属于:联系人,类别名称:'::CoreModels::PeopleAndCompanys::person', 可选:true“

谢谢大家。
关于,Dani

我假设您尝试在种子文件中创建事件记录,您必须首先创建association Person对象,然后再从Rails 5 forward
属于
默认情况下需要关联。Person需要从ApplicationRecord(或ActiveRecord::Base)继承。是这样吗?嗨,当我删除对联系人字段的所有引用(从迁移和模型中)时,没有问题,一切正常。因此,这与我定义联系人字段的方式有关。关于这一点,Dani刚刚在联系人字段的事件种子文件中添加了所有条目的数据,一切正常。但是我还希望有一些联系人字段为空(无联系人)的条目。需要选择是否有联系人。因此,目前它希望我们能与有数据的人取得联系。如何使其成为可选的?尊敬的DaniHi,我已经解决了这个问题,我在事件的modles文件中添加了-optional:true:belowns\u to:contact\u person,class\u name:'::CoreModels::peopleandcompanys::person',optional:true谢谢大家。你好,丹尼
class Event < ApplicationRecord
  belongs_to :contact_person,
                  class_name: '::CoreModels::PeopleAndCompanies::Person'
end
module CoreModels
    module PeopleAndCompanies
      Person.class_eval do
         has_many :events, :class_name => 'Event', :as => :contact_person
      end
    end
end