2013-05-12 46 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