2013-05-12 48 views
2

我有两个型号,一个具有通过它们之间的关联许多象下面这样:问题与驼峰和下划线的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。)

我看不出有什么问题。

+0

您不遵循导轨约定,因此您需要指定列的名称。 – aromero 2013-05-12 22:37:34

+0

遵循约定我需要改变什么? – Jcao02 2013-05-12 22:56:30

回答

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

+0

工作正常!我尝试了一次,但忘记更改Dependencia模型上的camelcase。谢谢 – Jcao02 2013-05-12 23:03:40