2

以下のように、それらの間の関連付けを通じて多くのモデルを持つ2つのモデルがあります。

TipoDocumento < ActiveRecord::Base
    has_many :dependencias
    has_many :TipoRequisitos, :through => :dependencias
    ...
end

TipoRequisito < ActiveRecord::Base
    has_many :dependencias
    has_many :TipoDocumentos, :through => :dependencias
    ...
end

Dependencia < ActiveRecord::Base
    belongs_to: TipoDocumento
    belongs_to: TipoRequisito
    ...
end

結合モデル Dependencia の ID 属性は、TipoDocumento_id と TipoRequisito_id です。

さて、Rails コンソールでこれを試すと、次のようになります。

x = TipoDocumento.find(1)
x.TipoRequisitos

次のエラーが表示されます。

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: dependencia.tipo_documento_id: SELECT "tipo_requisitos".* FROM "tipo_requisitos" INNER JOIN "dependencia" ON "tipo_requisitos"."id" = "dependencia"."TipoRequisito_id" WHERE "dependencia"."tipo_documento_id" = 1

また、TipoRequisito で反対のことを試しても同じです。

Rails は、クエリを実行するときに、tipo_documento_id の TipoDocumento_id 列名を何らかの形で変更しているようです。そこで、id の列の名前を CamelCase から snake_case に変更しようとしましたが、アナログ エラー (TipoDocumento_id または TipoRequisito_id が見つかりません) が発生します。

何が悪いのかわかりません。

4

1 に答える 1