Я хочу реализовать простую полиморфность. Моя цель состоит в том, что пользователь, группа и, возможно, другие модели могут совместно использовать один пул идентификаторов, так что все представляет собой GlobalObject
. Я построил что-то вроде этого:«Неизвестный ключ: полиморфный» во время работы rake
global_object.rb
порожденной$ rails generate scaffold GlobalObject mode:integer
:class GlobalObject < ActiveRecord::Base attr_accessible :mode has_many :identifyable, :polymorphic => true, :dependent => :destroy end
user.rb
порожденной$ rails generate scaffold User login password
:class User < ActiveRecord::Base attr_accessible :login, :password, :salt belongs_to :global_object, :as => :permittable end
и модель группы будет следовать с очень аналогичная структура. Я не изменял файлы переноса из папки db, а просто выполнил $ rake db:migrate
.
20131102224115_create_global_objects.rb
:class CreateGlobalObjects < ActiveRecord::Migration def change create_table :global_objects do |t| t.integer :mode t.timestamps end end end
20131102224332_create_users.rb
:class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :login t.string :password t.timestamps end end end
Когда я исполняю $ rake
, он показывает две впечатляющие следы с этими началами:
(...)hash/keys.rb:51:in `block in assert_valid_keys': Unknown key: polymorphic (ArgumentError)
from /Users(...)
...
(...)hash/keys.rb:51:in `block in assert_valid_keys': Unknown key: polymorphic (ArgumentError)
from /Users(...)
...
Когда я удаляю :polymorphic => true
в global_object.rb, происходят те же ошибки, но вместо Unknown key: polymorphic
говорится: Unknown key: as
. Что не так?
По крайней мере, вы должны указать свое имя класса, потому что я не вижу никакого идентифицируемого класса. Это должно быть 'has_many: identable,: class_name => 'User',: polymorphic => true, ...' – zishe
@zishe: вся точка полиморфного отношения заключается в том, что он не должен относиться к определенному классу ... – PinnyM
ОК, извините за недоразумение =) – zishe