Introduzimos um patch para evitar a serialização acidental de modelos ActiveRecord sem especificar os campos a serem serializados. Essa alteração garante que controlamos quais campos são incluídos, evitando problemas potenciais com a exposição de dados incompletos ou excessivos.
Por padrão, renderizar um modelo ActiveRecord como JSON inclui todos os atributos, o que pode não ser desejável em muitos casos. Para impor melhores práticas, precisamos especificar quais campos devem ser serializados.
Exemplos de Uso
Uso Incorreto:
def show
@user = User.first
render json: @user
end
Em desenvolvimento e testes, isso resultará em:
ActiveRecordSerializationSafety::BlockedSerializationError:
Serializar modelos ActiveRecord (User) sem especificar campos não é permitido.
Use um Serializador ou passe a opção :only para #serializable_hash. Mais informações: https://meta.discourse.org/t/-/314495
./lib/freedom_patches/active_record_disable_serialization.rb:15:in `serializable_hash'
Uso Correto:
Usando um Serializador
class UserSerializer < ApplicationSerializer
attributes :id, :email
end
def show
@user = User.first
render json: @user, serializer: UserSerializer
end
Usando a opção :only
def show
@user = User.first
render json: @user.as_json(only: [:id, :email])
end
Este documento é controlado por versão - sugira alterações no github.
Apenas para esclarecer para aqueles que possam encontrar isso, isso significa que todos os usos dos métodos de serialização em ActiveModel::Serialization, por exemplo, as_json, independentemente do contexto (incluindo em testes), resultarão em um erro, a menos que você passe a opção only. Veja mais em
Bem, levou 21 dias, mas finalmente entendi o que você disse aqui no seu código vinculado, em pelo menos um contexto, e espero que o outro mencionado no tópico dividido acima. Este último parece mais difícil (pelo menos na minha memória), já que não sei exatamente onde está o problema.
Obrigado por salvar o dia (ou pelo menos este dia).
O outro problema foi que meu modelo server incluía o modelo user e eu precisava chamar o serializador do usuário (ou limitar os campos) do modelo do usuário no meu serializador do servidor.
Aconteceu que eu não precisava de nenhum modelo de usuário no meu modelo de servidor (o user_id já estava lá, e há uma chance razoável de que eu nem precise disso).