2014-11-13 4 views
0

У меня есть таблица (связи), она должна иметь несколько полиморфных отношений. Первый работает, а второй получает ошибку. Вот расположение таблиц. Я получаю эту ошибку, даже если я меняю 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

ответ

2

ошибка говорит, что нет класса под названием Link - не кажется, что у вас есть один из того, что вы показали.

+0

Это правда, что нет. Но строка 'has_many: links, as:: linkable' и строка' belongs_to: linkable, polymorphic: true' должна позаботиться об этом (я думаю). – covard

+0

Однако после проведения некоторых тестов с учетом этого вы правы. Я изменил 'has_many: connections, as:: connectable' на' has_many: cons, as:: connectable'. Я получаю аналогичную ошибку 'uninitialized constant Person :: Con'. – covard

+0

Я смог исправить это, выполнив это: has_many: links, as:: linkable, depend:: destroy, class_name: 'Connection'' – covard

Смежные вопросы