У меня есть таблица (связи), она должна иметь несколько полиморфных отношений. Первый работает, а второй получает ошибку. Вот расположение таблиц. Я получаю эту ошибку, даже если я меняю has_many :links, as: :linkable
на has_many :connection_links, as: :linkable
, думая, что это было какое-то зарезервированное слово.Rails Одна таблица Несколько полиморфных отношений
class CreateConnections < ActiveRecord::Migration
def change
create_table :connections do |t|
t.integer :connectable_id
t.string :connectable_type
t.integer :linkable_id
t.string :linkable_type
t.boolean :status_id
t.timestamps
end
end
end
class Connection < ActiveRecord::Base
# relations
belongs_to :connectable, polymorphic: true
belongs_to :linkable, polymorphic: true
end
class Person < ActiveRecord::Base
has_many :connections, as: :connectable, dependent: :destroy
has_many :links, as: :linkable, dependent: :destroy
end
class Business < ActiveRecord::Base
has_many :connections, as: :connectable, dependent: :destroy
has_many :links, as: :linkable, dependent: :destroy
end
Когда я пытаюсь вытащить links
, это ошибка.
[2] pry(main)> person.connections Connection Load (0.4ms) SELECT "connections".* FROM "connections" WHERE "connections"."connectable_id" = $1 AND "connections"."connectable_type" = $2 [["connectable_id", 9], ["connectable_type", "Person"]] => []
[3] pry(main)> person.links NameError: uninitialized constant Person::Link
Это правда, что нет. Но строка 'has_many: links, as:: linkable' и строка' belongs_to: linkable, polymorphic: true' должна позаботиться об этом (я думаю). – covard
Однако после проведения некоторых тестов с учетом этого вы правы. Я изменил 'has_many: connections, as:: connectable' на' has_many: cons, as:: connectable'. Я получаю аналогичную ошибку 'uninitialized constant Person :: Con'. – covard
Я смог исправить это, выполнив это: has_many: links, as:: linkable, depend:: destroy, class_name: 'Connection'' – covard