我使用的是Rails 4.2.3和MySQL 5.5.37。我想为我的模型编写一个finder方法,所以我写了这个(./app/models/user_object.rb):
class UserObject < ActiveRecord::Base validates :day, :presence => true validates_numericality_of :total validates :object, :presence => true def find_total_by_user_object_and_year UserObject.sum(:total, :conditions => ['user_id = ?', params[:user_id], 'object = ?', params[:object], 'year(day) = ?', params[:year]]) end end
然而,当我试图在这样的控制器中调用该方法时
@my_total = UserObject.find_total_by_user_object_and_year(session["user_id"], 3, @year)
我得到以下错误
undefined method `find_total_by_user_object_and_year' for #<Class:0x007fb7551514e0>
定义finder方法的正确方法是什么?
使用 self.method 要定义类方法:
self.method
def self.find_total_by_user_object_and_year sum(:total, :conditions => ['user_id = ?', params[:user_id], 'object = ?', params[:object], 'year(day) = ?', params[:year]]) end
在这种情况下 UserObject 类内方法定义是多余的,因为它与 self 。现在你可以写:
UserObject
self
UserObject.find_total_by_user_object_and_year(params)