问题与驼峰和下划线的Rails 3
问题描述:
我有两个型号,一个具有通过它们之间的关联许多象下面这样:问题与驼峰和下划线的Rails 3
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
的ID,用于联接模型Dependencia属性TipoDocumento_id和TipoRequisito_id。
现在,当我尝试这在铁轨控制台:如果我尝试用TipoRequisito相反它是相同的
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
也:
x = TipoDocumento.find(1)
x.TipoRequisitos
我得到这个错误。
看来Rails在执行查询时会改变tipo_documento_id的TipoDocumento_id列名称。所以,我试图将id列的名称从他们的CamelCase更改为他们的snake_case,但是我得到了模拟错误(找不到TipoDocumento_id或TipoRequisito_id。)
我看不出有什么问题。
答
您需要遵循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
+0
工作正常!我尝试了一次,但忘记更改Dependencia模型上的camelcase。谢谢 – Jcao02 2013-05-12 23:03:40
您不遵循导轨约定,因此您需要指定列的名称。 – aromero 2013-05-12 22:37:34
遵循约定我需要改变什么? – Jcao02 2013-05-12 22:56:30