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)>
直接建立一个新的关联,但失败了。我觉得我遗漏了一个小细节