Pergunta

Estou tendo um problema em procurar registros na minha tabela STI devido à minha estrutura de herança

class User < ActiveRecord::Base

class LegacyUser < User

class AuthUser < User

class SuperUser < AuthUser

class FieldUser < AuthUser

class ClientAdmin < AuthUser

O problema é que o encontro não funciona para o modelo de autenticação. A consulta está procurando o tipo "Authuser" e não inclui as outras três possibilidades.

EDIT: Enquanto brincava com isso, começou a funcionar, mas apenas para clientes e fielduser, então parece que essa funcionalidade deve ser construída. Mas agora voltou ao problema original

Foi útil?

Solução

Acabei de encontrar esse mesmo problema e encontrei uma solução aqui.

Em suma, a questão é que não há como sua classe abstrata intermediária saber quais são suas subclasses antes de serem carregadas. Para contornar isso, você pode carregar manualmente todas as subclasses na parte inferior do arquivo dessas classes.

Então, na parte inferior de auth_user.rb:

require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'

Outras dicas

O modelo authuser será usado por si só?

Se for apenas uma classe para métodos compartilhados entre as classes herdadas, você pode tentar defini -la como uma classe abstrata. Dessa forma, o ActiveRecord pode passar por ele.

Na Declaração de Authuser, basta adicionar self.abstract_class = true assim:

class AuthUser < User
     self.abstract_class = true
end

Não sei se isso funciona nesse cenário, mas pode valer a pena tentar.

Devido à maneira como a STI funciona em trilhos (ele armazena o nome do modelo em uma coluna de banco de dados chamada 'Type'), não vejo como ele pode suportar a hierarquia que você descreve acima - acho que você está limitado a uma hierarquia de um único nível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top