Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.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_Activerecord - Fatal编程技术网

Ruby on rails 多态性具有多个关联,并且属于多个关联

Ruby on rails 多态性具有多个关联,并且属于多个关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个具有以下结构的联接表: create_table "enrollment_auth", id: false, force: :cascade do |t| t.integer "enrollment_id" t.string "authorizable_type" t.bigint "authorizable_id" end 这里的想法是,我希望将模式中的各种记录与注册相关联

我有一个具有以下结构的联接表:

  create_table "enrollment_auth", id: false, force: :cascade do |t|
    t.integer "enrollment_id"
    t.string "authorizable_type"
    t.bigint "authorizable_id"
  end
这里的想法是,我希望将模式中的各种记录与注册相关联(将其视为用户)。以下是我的示例数据:

+---------------+--------------------+------------------+
| ENROLLMENT_ID |  AUTHORIZABLE_TYPE |  AUTHORIZABLE_ID |
+---------------+--------------------+------------------+
|               |                    |                  |
| 1             |  Location          |  1               |
|               |                    |                  |
| 1             |  Location          |  2               |
|               |                    |                  |
| 1             |  Asset             |  8               |
+---------------+--------------------+------------------+
我要寻找的是一个
拥有且属于多个:在我的
注册
模型中验证位置
拥有多个
关系,以获得所有特定的多态集。即
注册.last.auth_位置
注册.last.auth_资产

我有这个,看起来很接近:

  has_and_belongs_to_many :auth_locations, -> { where "enrollment_auth.authorizable_type = 'Location'" }, join_table: :enrollment_auth, class_name: 'Location', association_foreign_key: 'authorizable_id'
在控制台上:

[42] pry(main)> Enrollment.last.auth_location_ids
  Enrollment Load (0.4ms)  SELECT  "enrollments".* FROM "enrollments" ORDER BY "enrollments"."id" DESC LIMIT $1  [["LIMIT", 1]]
   (0.4ms)  SELECT "locations"."id" FROM "locations" INNER JOIN "enrollment_auth" ON "locations"."id" = "enrollment_auth"."authorizable_id" WHERE "locations"."company_id" = 9 AND "enrollment_auth"."enrollment_id" = $1 AND (enrollment_auth.authorizable_type = 'Location')  [["enrollment_id", 99]]
=> []
这是一个空集,因为我还没有任何联接表条目,这是下一个问题。根据文档()我现在应该能够做到:

[43] pry(main)> Enrollment.last.auth_locations.build(authorizable_id: 12)
  Enrollment Load (0.3ms)  SELECT  "enrollments".* FROM "enrollments" ORDER BY "enrollments"."id" DESC LIMIT $1  [["LIMIT", 1]]
NoMethodError: undefined method `build' for nil:NilClass
from (pry):43:in `__pry__'
[44] pry(main)> 
直接建立一个新的关联,但失败了。我觉得我遗漏了一个小细节