如何在ActiveRecord抽象类中调用where方法?

时间:2014-08-29 14:47:42

标签: ruby activerecord ruby-on-rails-3.2 abstract-class

我们使用数据库资源表来提供应用程序组合框中显示的值。每个资源表都有一个display_name列和一个service_name列。显示名称是用户看到的内容,服务名称将发送到Web服务。我们的一些字段是可选的,我添加了一个is_default列。我想创建一个返回默认服务名称的抽象类。这是我的第一次努力。但是,当调用CondenserPumpControlType.default_service_name方法时,我得到:

  

异常消息:未定义的方法where' for Class:Class Stack trace: ["/apps/ar2/app/models/defaultable_record.rb:5:in default_service_name'“

我希望抽象类调用CondenserPumpControlType.where,而不是它似乎调用Class.where。我究竟做错了什么。我似乎找不到关于ActiveRecord抽象类的大量文档。

class DefaultableRecord < ActiveRecord::Base
  self.abstract_class = true

  def self.default_service_name
    default_value = self.class.where(is_default: 1).first
    default_value.service_name
  end
end

class CondenserPumpControlType < DefaultableRecord
  attr_accessible :display_name, :service_name, :sort_order, :is_default
end

1 个答案:

答案 0 :(得分:2)

self.class.where(is_default: 1).first 

应该是

self.where(is_default: 1).first