Может быть, есть кое-что, чего я не знаю, но я никогда не видел, чтобы классы Rails STI определялись таким образом. Обычно это выглядит как ...
приложение / модели / user.rb:
class User < AC::Base
belongs_to :account
end
приложение / модели / пользователи / standard.rb:
module Users
class Standard < User
before_save :some_callback
end
end
приложение / модели / пользователи / other.rb:
module Users
class Other < User
end
end
Похоже, что вы связываете область видимости класса (где класс «живет» по отношению к другим классам, модулям, методам и т. Д.) С наследованием класса (обозначается как «класс Standard <Пользователь»). Отношения Rails STI включают наследование, но не заботятся о сфере действия. Возможно, вы пытаетесь достичь чего-то очень специфического, вкладывая унаследованные классы, и я просто упускаю это. Но если нет, возможно, это вызывает некоторые из ваших проблем. </p>
Теперь перейдем конкретно к обратным вызовам. Обратный вызов в Standard не вызывается, потому что отношение account.users использует класс User, а не класс Standard (но я думаю, что вы уже это знаете). Есть несколько способов справиться с этим (я буду использовать мою структуру классов в примерах):
One:
class Account
has_many :users, :class_name => Users::Standard.name
end
Это заставит всех account.users использовать класс Standard. Если вам нужны возможности других пользователей, то ...
Два:
class Account
has_many :users # Use this to look up any user
has_many :standard_users, :class_name => Users::Standard.name # Use this to look up/create only Standards
has_many :other_users, :class_name => Users::Other.name # Use this to look up/create only Others
end
Три:
Просто вызовите Users :: Standard.create () и Users :: Other.create () вручную в своем коде.
Я уверен, что есть много других способов сделать это, но, возможно, есть самые простые.