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

3

在定义关系时引用模型时,您需要遵循 Rails 约定并使用小写名称:

 TipoDocumento < ActiveRecord::Base
     has_many :dependencias
     has_many :tipo_requisitos, through: :dependencias
     ...
 end

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

Dependencia < ActiveRecord::Base
    belongs_to :tipo_documento
    belongs_to :tipo_requisito
    ...
 end

您需要将其小写,如下所示:

  x = TipoDocumento.find(1)
  x.tipo_requisitos

另请查看: http: //guides.rubyonrails.org/association_basics.html

于 2013-05-12T22:51:36.753 回答