CamelCase的问题和下划线Rails 3

时间:2013-05-12 22:27:52

标签: ruby-on-rails ruby-on-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

连接模型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。)

我没有看到什么是错的。

1 个答案:

答案 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

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