使用find_by_ <field>返回“表不存在”错误</field>

时间:2014-02-20 00:35:53

标签: ruby-on-rails ruby activerecord

我正在开发一个连接到SQL Server 2008数据库的Ruby 1.8 / Rails 2.1应用程序。

当我尝试使用find_by_CompanyCode方法时,ActiveRecord返回NoMethodError。然而,从下面你可以看到该表存在并且有相关的方法。

不确定我错过了什么......任何帮助都将不胜感激

编辑:当我只运行IvantageEmployee.first时,只有以“代码”结尾的字段才会出现..从视图中发生错误。将完全相同的代码移动到控制器,代码按预期工作。

 eval @goal.organization_type.employee_class + ".find_by_#{@goal.organization_type.employee_field_code}('#{@goal.specifier}').#{@goal.organization_type.employee_field_description}"
>> IvantageEmployee.first.CompanyCode
=> "GAI"
>> IvantageEmployee.find_by_CompanyCode('GAI')
NoMethodError: undefined method `find_by_CompanyCode' for IvantageEmployee(Table doesn't exist):Class
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:1613:in `method_missing_without_paginate'
    from /usr/lib/ruby/gems/1.8/gems/will_paginate-2.3.15/lib/will_paginate/finder.rb:170:in `method_missing'
    from (irb):7
>> 

更多信息。该表有几个字段。我正在努力的是CompanyCode,但它也有RegionDescription。

请注意以下控制台输出。 find_by_RegionDescription有效; find_by_CompanyCode不起作用。此外,当我输出类时,CompanyCode不会出现,但RegionDescription不会确定为什么ActiveRecord会丢失表中的字段

>> IvantageEmployee.find_by_RegionDescription 'GAI'
### Finding method find_by_RegionDescription
=> nil
>> IvantageEmployee.find_by_CompanyCode 'GAI'
### Finding method find_by_CompanyCode
NoMethodError: undefined method `find_by_CompanyCode' for IvantageEmployee(Table doesn't exist):Class
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/base.rb:1614:in `method_missing_without_paginate'
    from /usr/lib/ruby/gems/1.8/gems/will_paginate-2.3.15/lib/will_paginate/finder.rb:170:in `method_missing'
    from (irb):9
>>

1 个答案:

答案 0 :(得分:3)

你需要使用蛇盒而不是驼峰盒:

IvantageEmployee.find_by_company_code('GAI')

ruby​​中的约定是对类使用camel case,对方法使用snake case。 Rails遵循该约定(如您所愿),因此您可以假设由它动态创建的任何方法都是蛇形的。