我有一个 Rails 应用程序,用户有孩子。所以我有两个模型::users 和:children。
我曾经有一个一对多的关系(has_many/belongs_to),但我想将它开放为一个多对多的关系,我可以在其中存储有关该关系的变量。所以我将关系更改为“has_many through”关系。我创建了一个名为 :relationships 的表。一个小警告:我希望用户的 foreign_key 是:parent_id。这是我设置它们的方式:
架构:
create_table "relationships", :force => true do |t|
t.integer "child_id"
t.integer "parent_id"
t.datetime "created_at"
.
.
.
create_table "users", :force => true do |t|
t.string "email", :null => false
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.string "first_name"
t.string "last_name"
.
.
.
create_table "children", :force => true do |t|
t.string "name", :null => false
t.integer "parent_id", :null => false
t.datetime "created_at", :null => false
.
.
.
类定义:
用户.rb:
has_many :relationships, foreign_key: "parent_id"
has_many :children, :through => :relationships, foreign_key: "parent_id"
孩子.rb:
has_many :relationships, foreign_key: "child_id"
has_many :parents, :through => :relationships
关系.rb:
belongs_to :parent, class_name: "User", :foreign_key => :parent_id
belongs_to :child, class_name: "Child", :foreign_key => :child_id
现在,当我选择特定用户并尝试获取 user.children 时,我得到 [] 作为响应。如果我尝试添加新的孩子,它也不起作用。我可以定义父母和孩子,但是当它试图保存时,它不能将两者联系起来。它没有看到父母,所以我收到错误:
* ActiveRecord::StatementInvalid (PG::Error: ERROR: "parent_id" 列中的空值违反非空约束*
如果我将类定义切换回一对多设置,它可以很好地访问孩子。我不明白问题是什么。任何帮助将不胜感激。
谢谢