我有两个模型,它们之间有许多关联,如下所示:
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。)
我没有看到什么是错的。
答案 0 :(得分: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