O erro identificado no título está sendo invocado ao executar o seguinte
@component = Ccomponent.new(ccomponent_params)
A resposta obtida “22” foi isolada com duas submissões diferentes:
Parameters: {"authenticity_token"=>"[FILTERED]", "ccomponent"=>{"shop_id"=>"1", "unit_um_id"=>"22", "shelf_life_target"=>"2"}, "commit"=>"submit"}
Parameters: {"authenticity_token"=>"[FILTERED]", "ccomponent"=>{"shop_id"=>"1", "unit_um_id"=>"", "shelf_life_target"=>"2"}, "commit"=>"submit"}
Com o segundo caso retornando got ""
na mensagem de erro.
Portanto, o problema é com o relacionamento da unit_um_id
variável.
A classe é definida com duas variáveis provenientes da mesma classe.
belongs_to :um, class_name: 'Categoryminor'
belongs_to :unit_um_id, class_name: 'Categoryminor', optional: true
O erro não havia aparecido antes quando a unit_um_id
variável não existia. Assim, parece que Rails não permite que duas variáveis pertençam à mesma classe (posso ver o porquê: parâmetros são sempre strings e é a lógica do modelo que será convertida em um número inteiro: portanto, apenas um relacionamento está sendo processado por essa lógica aqui)
um
substitui a unidade de medida e ambas são necessárias na classe (considere uma garrafa com capacidade de 75 cl (1º um), mas é comprada em garrafas (unidades - 2º um).
Não seria possível criar o relacionamento a priori e executar uma busca indexada toda vez que a variável fosse necessária, mas isso não é muito eficiente.
Como esse modelo poderia ser interpretado de outra forma?
Seu problema está aqui:
Isso deve ser
No momento, porque
:unit_um_id
é uma associação, espera que você passe um objeto desse tipo associado, por exemplo,Categoryminor
mas você está passando umString
.Como observação lateral,
um_id
é um parâmetro obrigatório por causa dobelongs_to
relacionamento, mas não parece que você esteja transmitindo um no momentoccomponent_params
.